在C语言中提供了rand这个函数来随机生成数,但是没有别的函数来规定生成的数不重复,因此要自己设计循环来输出不重复的数。#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned)time(NULL));
int a[20],b,i,m,n;
for(i=1;i<=20;i++)
{
a[i]=rand()%35+1;
for(m=1;m<i;m++)
{if(a[m]==a[i])
i--;
}
}
for(b=1;b<=20;b++)
printf("%d\n",a[b]);
}
代码如上,生成了1-35中不重复的20个数。现在来讲解一下这个代码。简单的头文件和srand的使用我就不过多介绍了。直接从思路开始。
1:这里使用了数组,是因为你生成的数据必须有一个地方存放,不然后面无法对其中生成的数进行是否重复的判断,所以数组在这里起到了一个容器的作用。
2:核心是这个if的判断,m从1到i之间是为了检验新生成的数是否和前面的数重复,注意,m一定不等于i,不然这个逻辑就是死的,数组中的第i个数一定等于i个数的。然后巧妙使用i--,虽然前面已经生成的第i个数,但是i--的使用,使下一次生成的值赋给了第i个数,覆盖了原先的值,所以能保证生成的数不重复。
3:就是输出printf的一个使用。按常理来说,printf一般都用在for循环里面,但是在这个代码里面两个for都是不能使用printf的,具体原因我就留给读者去分析了,可能笔者见解有误,因为笔者也是个初学者,是本学期开的c语言,但是笔者认为在循环完printf一定是最优算法。
欢迎大家在评论区留下宝贵的意见,一起讨论共同进步。