学堂 学堂 学堂公众号手机端

在C语言中,可以使用rand()函数生成随机数,但是要生成不重复的随机数,可以采用以下方法: 使用数组存储已经生成的随机数,每次生成新的随机数时,先检查数组中是否已经存在该随机数,如果存在则重新生成,直到生成一个不重复的随机数

lewis 1年前 (2024-02-12) 阅读数 5 #技术

在C语言中,可以使用rand()函数生成随机数,但是要生成不重复的随机数,可以采用以下方法:

  1. 使用数组存储已经生成的随机数,每次生成新的随机数时,先检查数组中是否已经存在该随机数,如果存在则重新生成,直到生成一个不重复的随机数。
#include<stdio.h> #include<stdlib.h> #include<time.h> intmain(){ intnums[10];//存储生成的随机数 intindex=0; srand((unsigned)time(NULL));//初始化随机数种子 while(index<10){ intnew_num=rand()%100;//生成0~99的随机数 //检查数组中是否已经存在该随机数 inti; intis_duplicate=0; for(i=0;i<index;i++){ if(nums[i]==new_num){ is_duplicate=1; break; } } if(!is_duplicate){ nums[index]=new_num; index++; } } //输出生成的不重复随机数 for(inti=0;i<10;i++){ printf("%d",nums[i]); } return0; }
  • 可以使用洗牌算法(Fisher–Yatesshuffle)生成一个随机排列,然后取前n个元素作为不重复的随机数。
  • #include<stdio.h> #include<stdlib.h> #include<time.h> voidshuffleArray(intarr[],intn){ srand((unsigned)time(NULL)); for(inti=n-1;i>0;i--){ intj=rand()%(i+1); inttemp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } intmain(){ intnums[10];//存储生成的随机数 for(inti=0;i<10;i++){ nums[i]=i; } shuffleArray(nums,10); //输出生成的不重复随机数 for(inti=0;i<10;i++){ printf("%d",nums[i]); } return0; }

    以上是两种生成不重复的随机数的方法,可以根据实际需求选择合适的方法。


    版权声明

    本文仅代表作者观点,不代表博信信息网立场。

    热门