【问题标题】:Generating random non repeating number array in C++在 C++ 中生成随机非重复数字数组
【发布时间】:2014-11-10 18:13:58
【问题描述】:
我需要在 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++;
}
}
【问题讨论】:
标签:
c++
arrays
random
dynamically-generated
【解决方案2】:
我有一个类似的任务,使用了两个函数来解决重复数字的问题。
#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 分别切换为您喜欢的上限和下限。