【发布时间】:2019-06-15 08:56:16
【问题描述】:
我可以将随机数放入一个数组中,但我不知道如何检查以确保它们不会重复。我打印出代码,但数组中没有数字(什么都不打印)。
//puts random numbers into an array
i = 0, j = 0;
srand(time(NULL));
for (i = 0; i < arrSize; i++)
{
randArr[i] = randNums(1,50);
}
i = 0;
for(i = 0; i < arrSize; i++)
{
printf("%d ", randArr[i]);
}
printf("\n\n");
//checks to make sure there are no duplicates
i = 0, j = 0, k = 0, temp = 0;
for (i = 0; i < arrSize; i++)
{
for (j = 1; j <= arrSize;)
{
if (randArr[j] == randArr[i])
{
for (k = j; k <= arrSize; k++)
{
temp = randNums(1,50);
randArr[k + 1] = temp;
}
arrSize--;
}
else
j++;
}
}
//generates random numbers between the inputed max and min
int randNums(int min, int max)
{
int result = 0, low = 0, high = 0;
if (min < max)
{
low = min;
high = max + 1;
}
else
{
low = max + 1;
high = min;
}
result = (rand() % (high - low)) + low;
return (result);
}
【问题讨论】:
-
欢迎来到 SO。您应该给出一个最小的完整且可验证的示例。有关指南,请参阅 stackoverflow.com/help/mcve。它应该包括所有声明和您的主要声明。
-
@AlainMerigot 这只是我的一小部分代码,因为其他部分根本不影响这部分
-
这通常是一个算法问题,有许多不同的解决方案和不同的权衡。您会在互联网上找到许多不同的方法,只需在此处链接 一些 源:geeksforgeeks.org/…
-
我认为使用en.wikipedia.org/wiki/Poisson_distribution 重复然后随机排列值可能是最快的,但如果两个值相交,可以排序和重新滚动。
-
我喜欢@Neil 的想法