m0_72556823 2023-02-14 14:27 采纳率: 50%
浏览 25

C语言rand()函数生成随机数,为什么第16次一定结果不一样?

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

  • 写回答

2条回答 默认 最新

  • SSS4362 2023-02-14 14:59
    关注

    随机数在数据量过大的情况下,会尽可能的趋向于五五开的那种情况

    评论

报告相同问题?

问题事件

  • 创建了问题 2月14日

悬赏问题

  • ¥15 R语言绘制生存曲线时出现警告:All aesthetics have length 1, but the data has 2 rows.
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响