C语言用rand函数生成随机数,我一开始只是无聊想模拟下扔硬币,记录正反次数和最多出现的连续正反次数,然后我发现设置rand()的结果限定为两个时,就是随机数结果是[n,n+1]的情况下,无论如何当出现连续15次n/n+1时,第16次一定是n+1/n。这是为什么?
代码如下,这个代码不会出现正面或反面连续出现16次的结果,无论扔多少次。
我还试了下把范围改到4个数字,也就是[n,n+3],那么每个数字最多连续出现8次,第九次一定是另外三个数字,这是什么原因?
int main()
{
srand((unsigned)time(NULL));
int zhengmian=0,a=0;
int fanmian=0,b=0;
int cnt,n,d;
int aa=0,bb=0;
while(1)
{
scanf("%d",&n);
cnt=0;
a=0;b=0;aa=0;bb=0;zhengmian=0;fanmian=0;
while(n>cnt)
{
cnt++;
d=1 + rand() % 2;
if(d > 1)
{
zhengmian++;
b=0;
a++;
if(a>aa)
{
aa=a;
}
// if(aa == 15)
// {
// printf("出现正面%d次,反面%d次。\n",zhengmian,fanmian);
// }
}
else
{
fanmian++;
a=0;
b++;
if(b>bb)
{
bb=b;
}
// if(bb == 15)
// {
// printf("出现正面%d次,反面%d次。\n",zhengmian,fanmian);
// }
}
}
printf("出现正面%d次,反面%d次。\n",zhengmian,fanmian);
printf("其中最多连续%d次正面,%d次反面。\n",aa,bb);
}
return 0;
}