我需要帮助检查二维数组中的重复整数

时间:2016-09-13 22:11:11

标签: c++ arrays

我被要求创建一个独特的(没有两个数字是相同的)随机数集 (用户输入行和列维度' d1'和' d2')

我完全迷失了如何比较两个数组的每个元素,看看它们是否重复。

(最大值是要生成的最大值)

    void RandomArray(IntArrayPtr* m, int d1, int d2, int max)
 {
for (int i = 0; i < d1; i++)
{
    for (int j = 0; j < d2; j++)
    {
        m[i][j] = (rand() % max + 1);
        if (i > 0 && j > 0)
        {
            if (m[i][j] == m[i][j - 1] || m[i][j] == m[i-1][j])
            {
                m[i][j] = (rand() % max+ 1);
            }
        }
    }
  }
}

2 个答案:

答案 0 :(得分:3)

将每个值存储在名为unordered_set的C ++数据结构中,并检查生成的随机值是否存在于此集合中。

有关如何使用unordered_set的参考:https://stackoverflow.com/a/24644253/3326925

PS:我在C ++中表现不佳,但可以告诉你将它与J​​ava中使用的HashSet联系起来。

答案 1 :(得分:0)

另一个解决方案是生成一组n个随机数,使用类似numbers.add( n + random() )的内容,其中n是最后添加的数字,random()是随机增量(每次不同)。< / p>

获得该集后,您可以使用std::random_shuffle(...)。并在矩阵上逐个添加元素。