以下结果可以生成随机数,但仍会出现重复的数字。猜猜 if else 语句中是否存在smtg错误?
附加:
问题是:
将条目生成为随机数,并重复创建新数字,直到找到合法的条目值。
因此,交换元素不是解决方案。
int x = 0, y = 0, input[20], current, temp;
main(){
srand((unsigned)time(NULL));
for (x = 0; x < 20;x++){
input[x] = rand() % 20 + 1;
for (y = 0; y < 20; y++){
if (input[x] == input[y]){
if (y != x){
input[x] = rand() % 20 + 1;
y = 0;
}
}
}
}
for (x = 0; x < 20; x++){
printf("Input[%d]: %d\n", x + 1, input[x]);
}
getch();
}
答案 0 :(得分:4)
除了一些明显的问题(见评论......)
如果找到重复项,则会生成一个新数字,但不会重新检查重复项,因此不会将其与数组中的先前值进行比较。
答案 1 :(得分:0)
您可以使用布尔数组并使用直接散列。
让我们说r是第一个随机数。
make input[r]=1;
现在,当生成下一个随机数时,您只需检查它是否先前使用
if(!input[r])
{
...
}
现在每次条件为假时,将循环计数器递减1.
for (x = 0; x < 20; x++)
{
int r=rand()%20+1;
if(!arr[r])
printf("%d\n",r);
else
x--;
arr[r]=1;
}