生成随机数

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;
}

 

posted @ 2020-11-21 11:21  inss!w!  阅读(145)  评论(0编辑  收藏  举报