我被要求创建一个独特的(没有两个数字是相同的)随机数集 (用户输入行和列维度' 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);
}
}
}
}
}
答案 0 :(得分:3)
将每个值存储在名为unordered_set的C ++数据结构中,并检查生成的随机值是否存在于此集合中。
有关如何使用unordered_set的参考:https://stackoverflow.com/a/24644253/3326925
PS:我在C ++中表现不佳,但可以告诉你将它与Java中使用的HashSet联系起来。
答案 1 :(得分:0)
另一个解决方案是生成一组n个随机数,使用类似numbers.add( n + random() )
的内容,其中n
是最后添加的数字,random()
是随机增量(每次不同)。< / p>
获得该集后,您可以使用std::random_shuffle(...)
。并在矩阵上逐个添加元素。