生成唯一的随机字符并将其保存在数组中

时间:2017-04-10 17:03:51

标签: c++ random

我想生成随机数并将它们保存在数组中。该'全部!但这就是重点,我想避免重复,而不是数组中的数字两次或更多次。

我的代码:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    int k, temp;

    cin >> k;

    int sym[k];

    srand(time(NULL));

    for (int i = 0; i < k; i++)
    {
        temp = rand() % 25 + 97;

        for(int j=0; j<i; j++)
        {
            while(temp == sym[j])
            {
                temp = rand() % 25 + 97; // 25 means a and 122 means z
            }
        }

        sym[i] = temp;

    }

    for(int i=0; i<k; i++)
    {
        cout << sym[i] << endl;
    }
    return 0;
}

我仍然得到重复的结果。

2 个答案:

答案 0 :(得分:0)

随机生成器并不意味着唯一的生成,尤其是当生成的数量很高且生成的边界或限制很小时,总会发生冲突......

避免重复元素替换此数组

int sym[k];

通过一个集合,它是一个不允许重复输入的容器......

std::set<int>

之后,你需要替换逻辑,因为循环k次并不意味着在集合中有k个元素,所以你需要做一个while循环,直到集合的大小达到极限 k

编辑:

如果您需要一些未分类的生成值,而不是使用设置,请考虑实施 unordered_set

答案 1 :(得分:0)

我将使用std :: unordered_set来避免重复