#include <stdlib.h> #include <stdio.h> #include <time.h> //假设生成....100之间的个随机数 #define One 0x00000001 int cmp(const void *a,const void *b) { int *aa=(int *)a; int *bb=(int *)b; if(*aa<*bb) { return -1; } if(*aa==*bb) { return 0; } if(*aa>*bb) { return 1; } return 2; } int main() { srand((unsigned int)time(0)); //设置个种子 unsigned int flag[4]={0}; //total: 128bits, just use first 101 bits to check if num from 1 to 100 has appeared int showInOrder[20]; int i=0; while(i<20) { int num=rand()%100+1; if((flag[num/32]&(One<<(32-num%32-1)))==0) { flag[num/32]|=(One<<(32-num%32-1)); showInOrder[i]=num; printf("%d/n",num); ++i; } else { //print message to tell user there's a repeat printf("%d数字重复出现/n",num); } } //to show more clearly,store all the 20 nums into a array, and show them in order qsort(showInOrder,20,sizeof(int),cmp); printf("下面按顺序打印出无重复随机数:/n"); for(int j=0;j<20;++j) { printf("%d,",showInOrder[j]); } return 0; }