如何在C ++中的数组中生成唯一值

时间:2018-07-31 21:21:56

标签: c++ algorithm validation

税率

我正在编写一个函数,该函数为彩票游戏生成1到49之间的随机值数组。将随机值分配给数组中的每个插槽很容易(已经编写了一个起作用的值生成器),就像对数组中的值进行排序一样,但是随后我必须验证它们是否都是唯一的。

在此先感谢您的帮助,或者直接向我指出正确的方向。 (根据提示的建议找不到我要找的东西。)

    void generateLottery(short lottery[], const short LENGTH, const short MIN, const short MAX) {
    for (short i = 0; i < LENGTH; i++) {
        short counter = 0;
        lottery[i] = generateRandomValue(MIN, MAX);
        while (lottery[counter] != NULL) {
            if (lottery[i] == lottery[counter]) {
                lottery[i] = generateRandomValue(MIN, MAX);
            }
            counter++;
        }
    }
    sortLottery(lottery, LENGTH);
}

2 个答案:

答案 0 :(得分:0)

代替

    lottery[i] = generateRandomValue(MIN, MAX);
    while (lottery[counter] != NULL) {
        if (lottery[i] == lottery[counter]) {
            lottery[i] = generateRandomValue(MIN, MAX);
        }
        counter++;

如果找到了号码,您可以只使用std::find来生成一个新号码。像这样...

    do
    {
      lottery[i] = generateRandomValue(MIN, MAX);
    }while(std::find(lottery.begin(), lottery.end(), lottery[i]));
    counter++;

正如其他人提到的那样,这不是最有效的方法,所以这完全取决于您希望拥有多少条目。

答案 1 :(得分:0)

创建一个由49个整数组成的数组,编号从1到49。随机排列数组。选择第一个n元素。现在,您有n个唯一的随机数,范围为1,49。

简单混洗:

  1. 从索引0开始。
  2. 生成随机数%49。
  3. 用arr [随机数]交换arr [index]。
  4. 重复索引1,2,3,4 ... 48。