• 生成随机数


    1.会有重复

    #include<stdio.h>
    #include<stdlib.h>//头文件
    //生成随机数(每次调用都相同,因为种子都为1)
    int main()
    {
        int a[10];
        for(int i=0;i<10;i++)
        {
            a[i]=rand();//不设随机数种子,默认为1
        }
        for(int i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }
        return 0;
    }
    //若范围为0-100,a[i]=rand()%101;
    设置随机数种子,每次调用都不一样
     srand((unsigned int)time(NULL));
        for(int i=0;i<10;i++)
        {
            a[i]=rand()%101;
        }
    生成在特定范围的随机数([left,right])
    for(int i=0;i<10;i++)
        {
            a[i]=rand()%(right-left+1)+left;
        }

    2.生成不重复随机数组

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    //生成不重复的随机数
    void swap(int a[],int i,int j)
    {
        int t;
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    
    int main()
    {//范围[0,n]随机数
        int n=20,m=10,k;
        int a[n];
        srand((unsigned int)time(NULL));
        for(int i=0;i<n;i++)//先把数组填满
            a[i]=i+1;
        for(int i=n-1;i>0;i--)
        {
            k=rand()%i;//产生0-i的随机数的下标
            swap(a,k,i);//与最后一个交换
        }//全部遍历一遍能产生全部的随机数
        for(int i=0;i<m;i++)
            printf("%d ",a[i]);
        return 0;
    }
    生成[n,m)范围不重复随机数
    int main()
    {//范围[m,n)随机数
        int n=30,m=10,k;
        int a[n-m];
        srand((unsigned int)time(NULL));
        for(int i=0;i<n-m;i++)//先把数组填满
            a[i]=i+m;
        for(int i=n-m-1;i>0;i--)
        {
            k=rand()%i;//产生0-i的随机数的下标
            swap(a,k,i);//与最后一个交换
        }//全部遍历一遍能产生全部的随机数
        for(int i=0;i<n-m;i++)
            printf("%d ",a[i]);
        return 0;
    }
  • 相关阅读:
    继续致歉
    向大家致歉!!
    访问速度调查
    致歉
    [功能改进]通过Blog客户端直接发随笔至网站分类
    带宽升级公告
    创业团队的类型
    [讨论]基于.NET的开源论坛软件的选择
    调整一下工作的节奏
    公告
  • 原文地址:https://www.cnblogs.com/Hfolsvh/p/14014711.html
Copyright © 2020-2023  润新知