【问题标题】: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


【解决方案1】:

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

【讨论】:

    【解决方案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 循环中使用的201 分别切换为您喜欢的上限和下限。

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 2014-11-19
      • 2011-01-05
      • 2011-11-24
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多