[英]can't figure out why I am getting a segmentation fault initializing my array
[英]Why am I getting duplicates in my array?
所以我要构成一个由52个整数组成的数组,我添加随机数并确保所有数字都不同。 如果有重复项,我将生成一个新数字,以使位于的当前索引不同。 我要去哪里错了?
for(i=0; i < SIZE; i++){
deck[i] = (rand() % 52);
for(c= 0; c <= i; c++ ){
if(deck[c] == deck[i+1]){
deck[i] = (rand() % 52);
}
}
}
对于内部for循环,您不能只尝试一次随机数。 生成它之后,您必须再次检查所有先前生成的项目,以确保没有生成与另一个项目相同的随机数。 这可以解决问题(假设SIZE = 52):
for(i=0; i < SIZE; i++){
deck[i] = (rand() % SIZE);
for(c= 0; c < i; c++ ){
if(deck[c] == deck[i]){
// Try another number
i--;
break;
}
}
}
也就是说,这不是一个非常快速的解决方案(它可能永远不会结束)。 最好创建一个数字数组0到51,然后通过一次交换两个元素来对其进行混洗。 我不会为您编写该代码,但这是一种标准的方法。
完全错误的方法。 您不需要随机数; 您需要精确的数字0到51(随机顺序)。 为此,请使用值0..51填充数组,然后正确地对其进行随机播放 :
for (int i = 0; i < 52; i += 1) deck[i] = i;
for (int i = 52; i > 1; i -= 1) {
int j = rand() % i;
int temp = deck[j];
deck[j] = deck[i-1];
deck[i-1] = temp;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.