【发布时间】:2014-01-10 23:17:18
【问题描述】:
我正在用 C 编写一个项目,我试图创建一个从 1 到 52 的随机数不重复但始终重复 1 个数字的矩阵!
void baralhar(int b[]){
int x,y,r;
for(x=0;x<53;x++){
r=rand() % 52+1;
for(y=0;y<=x;y++){
if(r==b[y])
{
y=0;
r=rand() % 52+1;
}
}
b[x]=r;
}
}
输出: 49 2 3 23 15 50 29 12 33 37 6 21 9 16 14 38 41 31 36 10 39 43 40 30 48 7 4 8 5 18 34 46 1 47 27 13 51 42 17 19 25 20 26 35 28 52 49 45 24 32 22 44
在这个例子中你可以看到数字 49 是重复的。你能帮忙吗?
【问题讨论】:
-
你需要的是一个从 1 到 52 的数字数组,然后将其洗牌。阅读关于洗牌算法的信息,例如en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle.
-
让我猜猜,你在做与卡片有关的事情吗?
-
同意洗牌而不是选号;但你似乎也偏离了 1?您似乎正在尝试用数字 1-52 填充插槽 0-52,因此必须重复其中一个。您的数组大小应为 52,即插槽 0-51。
-
水晶球:下一个问题的答案是stackoverflow.com/questions/3067364/…