代码
#define MAXSIZE 1000
int random(int min, int max){
return rand() % (max - min + 1) + min;
}
void randNumPercent(LinkedList L){
srand((unsigned int)time(NULL));
int *a = (int*)malloc(sizeof(int)*MAXSIZE);
for (int j = 0; j < MAXSIZE; j++){
int count = 0;
for (int i = 0; i < MAXSIZE; i++)
insertListT(L, random(1, MAXSIZE));//1~1MAXSIZE上的随机整数插入链表(尾插)
for (int i = 1; i <= MAXSIZE; i++){
if(getPrior(L, i))//找到i,返回前驱值,否则返回0
count++;
}
a[j] = count;//1~MAXSIZE上的整数随机生成MAXSIZE次,多少个数不一样,记为count
clearList(L);//每轮循环清空链表(保留头节点)
}
int sum = 0;
for (int j = 0; j < MAXSIZE; j++)
sum += a[j];
printf("比例为%.1f%%\n", (sum/MAXSIZE)*0.1);
}
int main(){
LinkedList L;
initList(L);
randNumPercent(L);
return 0;
}
输出
分析
最后输出大多时候是63.2%
,少数时候是63.1%,±0.1视为误差,说明随机生成1000个1~1000上的随机整数,有632
个不相同的数。
结论
实验涉及到了1000^2 = 10^6
个数的比较和计算,非常精确(做MAXSIZE=10000时的实验时直接卡住了。。。),有理由相信C语言rand()每次生成不重复数的概率为63.2%。