【发布时间】:2013-11-26 10:19:43
【问题描述】:
我尝试随机抽取 20 个具有不同输出的数字,但它仍然包含相同的数字。 代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int arr[20];
srand(time(NULL));
int temp;
temp=rand()%20;
int x=0;
while(x<20)
{
if(x==0)
{
arr[x]=temp;
x++;
}
else
{
for(int j=1;j<=x;j++)
{
do
{
temp=rand()%20;
} while(temp==arr[x-j]);
}
arr[x]=temp;
x++;
}
}
for(int i=0;i<20;i++)
{
printf("%d. %d \n",i,arr[i]);
}
}
这是输出:
- 10
- 1
- 6
- 2
- 13
- 19
- 2
- 19
- 4
- 19
- 14
- 18
- 12
- 2
- 17
- 15
- 0
- 1
- 18
- 8
提前致谢:D
【问题讨论】:
-
问题是什么?
-
考虑从一个包含 0 到 19 整数的数组开始,并使用 Fisher-Yates shuffle 算法,而不是通过生成具有先前元素中不存在的值的每个元素来构建数组。 .
-
正如@Thomas 所说,如果你想在 0 到 19 范围内的数字没有重复,那么从这些数字开始并随机播放。
-
刚刚编辑了问题以更正一些拼写错误(例如标题中的错误 "differen" 而不是正确的 "differenT")。