繁体   English   中英

为什么我的阵列中出现重复项?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM