标题:扑克牌洗牌问题
只看楼主
dqh3000
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-7-1
得分:0 
你所说的问题是不会发生的,这和指针没关系,我出代码你可以尝试看看
srand(unsigned(time(NULL)));
int card[54],t,r,i;
for(i=0;i<54;i++)
{
card[i]=i;
}
for(i=0;i<54;i++)
{
t=card[i];
r=(int)(54*rand()/(RAND_MAX+1.0));
t=card[r];
card[r]=i;
card[i]=t;
}

2006-07-01 21:52
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
我教楼主一个办法:
第1步:先定义一个数组a[54](拥有54个元素初值均为零)
第2步:执行 rand()%54 得到 0~53 之间的一个数i
第3步:检查 a[i] 是不是等于零?如果a[i]==0,说明
这是一张新牌。如果a[i]!=0,说明随机数重复了,于是
返回第2步。
第4步:新牌的处理如下
1.令a[i]=1;
2.根据i的值兑换成某张具体的扑克牌
3.兑换关系必须事先设定好
第5步:对获得的牌计数,若小于54返回第2步
否则停机。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-01 21:53
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
星星,你不觉得dqh3000的方法比你的要好么

淘宝杜琨
2006-07-01 21:59
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
回复:(神vLinux飘飘)星星,你不觉得dqh3000的方法比...
以下是引用神vLinux飘飘在2006-7-1 21:59:05的发言:
星星,你不觉得dqh3000的方法比你的要好么

wTScFGz4.txt (836 Bytes) 扑克牌洗牌问题




dqh3000的方法有问题哦:
1不见了,
48似乎有2个!

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-01 22:18
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
今天真见鬼了,连记事本的剪帖版都粘不上来!

管理员太有本事啦!!!

所以害得我不得不麻烦大家下载!不好意思。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-01 22:21
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
可能是他的程序写得不好,但是思想肯定是正确的

淘宝杜琨
2006-07-01 22:24
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
//总算用word粘贴上来了
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{
int card[54],t,r,i;
srand(time(NULL));
for(i=0;i<54;i++)
{
card[i]=i;
}
for(i=0;i<54;i++)
{
t=card[i];
r=(int)(54*rand()/(RAND_MAX+1.0));
t=card[r];
card[r]=i;
card[i]=t;
}
for(i=0;i<54;i++)
printf("%d\t",card[i]);
printf("\n");
}
运行实况
9 33 45 48 49 48 15 17 27 49
0 50 31 20 14 52 2 18 28 38
44 44 4 27 45 41 33 13 10 46
23 43 35 29 46 53 28 39 16 3
24 36 47 41 12 25 43 51 24 26
19 6 53 34
Press any key to continue

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-01 22:27
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
回复:(神vLinux飘飘)可能是他的程序写得不好,但是思...
以下是引用神vLinux飘飘在2006-7-1 22:24:01的发言:
可能是他的程序写得不好,但是思想肯定是正确的

扯淡。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-01 22:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define TIMES 1000
#define CARD_NUMBER 54

int main(void){
int card[CARD_NUMBER],i,a,b,temp;
time_t t;
srand( (unsigned)time(&t) );
for(i=0;i<CARD_NUMBER;card[i]=i++);
for(i=0;i<TIMES;i++){
temp = card[a=rand()%CARD_NUMBER];
card[a] = card[b=rand()%CARD_NUMBER];
card[b] = temp;
}
for(i=0;i<CARD_NUMBER;i++)
printf("card[%d]=%d\t",i,card[i]);
printf("\n");
return 0;
}

淘宝杜琨
2006-07-01 22:53
lxs5216
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
得分:0 
以下是引用神vLinux飘飘在2006-7-1 22:53:45的发言:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define TIMES 1000
#define CARD_NUMBER 54

int main(void){
int card[CARD_NUMBER],i,a,b,temp;
time_t t;
srand( (unsigned)time(&t) );
for(i=0;i<CARD_NUMBER;card[i]=i++);
for(i=0;i<TIMES;i++){
temp = card[a=rand()%CARD_NUMBER];
card[a] = card[b=rand()%CARD_NUMBER];
card[b] = temp;
}
for(i=0;i<CARD_NUMBER;i++)
printf("card[%d]=%d\t",i,card[i]);
printf("\n");
return 0;
}
晕,理论上没错,但是实践中却出了错啊,希望你来了看到贴后自己运行一下,我不知道是我的机子问题还是怎么,card的值居然是负数,而且全是一样的!!!!
2006-07-01 23:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-76109-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050749 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved