我需要在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++; } }
答案 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 循环中使用的 20
和 1
分别切换为您喜欢的上限和下限。