C ++中不重复的随机数

时间:2017-04-27 23:25:28

标签: c++ random numbers

我需要创建一个长度比数字短的数组。我必须选择的范围。 在示例中,我有一个由10 int组成的数组,范围在20到50之间。 这意味着这个问题("使用随机算法")的大多数asnwers(在各种网站上找到)都无法工作。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>

using namespace std;

int main() {

const int N = 10;
int arr[N];

srand(time(0));

// Just creates the array, but with repetitions
// for (int i=0; i<N; i++) {
//     arr[i] = (rand()%31)+20;
//     }

for (int i = 0; i <= N; ++i) {
    bool valid = true;
    do {
        arr[i] = ((rand()%31)+20);
        for (int j = 0; j < i; ++j) {
            if (arr[i] == arr[j])
                valid = false;
            else
                valid = true;
        }
    } while(!valid);
}

使用&#34; else&#34;我检查了之前的值,如果它相同,则会更改。 但是如果相同的数字比前一个数字更远,那么这个算法不会改变最后一个数字,因为&#34; else&#34;以前的正确号码结束了。 如果我删除了其他内容,我仍然会卡在cicle中,每次都会更改数字。

0 个答案:

没有答案