C语言如何随机生成不重复整数

在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一定是最优算法。

欢迎大家在评论区留下宝贵的意见,一起讨论共同进步。

  • 11
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值