在C ++中生成随机非重复数组

时间:2014-09-16 20:50:51

标签: c++ arrays random dynamically-generated

我需要在C ++中生成随机非重复数组,在这部分代码中我使用srand函数生成随机数,但有些数字是重复的。主要任务是为彩票生成随机数,所以我需要生成数字,直到标记为int golden的黄金数字。

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
  int golden = 31;
  int i = 0;
  int array[35];

 srand((unsigned)time(0));
    while(i != golden){
        array[i] = (rand()%75)+1;
        cout << array[i] << endl;
        i++;
}
 }

2 个答案:

答案 0 :(得分:7)

一种策略是使用1到75之间的数字填充数组,然后在其上使用std::random_shuffle()。然后,您可以从数组中读取数字,直到您达到黄金数字。

答案 1 :(得分:0)

我有一个类似的任务,使用了两个函数来解决重复数字的问题。

#include <iostream>
#include <ctime>

using namespace std;

void generateRandom(int array[], int length);
bool findVal(int array[], int size, int value);

int main() {
    int arraySize = 10;
    int array[arraySize];

    generateRandom(array, arraySize);
    for (auto i : array) {
        cout << i << " ";
    }

    return 0;
}

void generateRandom(int array[], int length) {
    srand((int) time(nullptr));
    int temp;

    for (int i = 0; i < length; ++i) {
        temp = rand() % 20 + 1;
        if (findVal(array, i, temp)) {
            i--;
            continue;
        } else {
            array[i] = temp;
        }
    }
}

bool findVal(int *array, int size, int value) {
    for (int i = 0; i < size; ++i) {
        if (array[i] == value) {
            return true;
        }
    }
    return false;
}

generateRandom 函数中,您可以将 for 循环中使用的 201 分别切换为您喜欢的上限和下限。