「已注销」 2022-08-30 12:01 采纳率: 80%
浏览 33
已结题

C语言模拟两数之差概率计算

准备模拟一下10000次内两个数之差小于20的概率,但是输出结果是1和0,无法达到预期

#include <stdio.h>
#include <stdlib.h>
int main()
{
    srand((unsigned)time(NULL));
    int i = 0;
    int count1 = 0;
    int count2 = 0;
    double percent1 = 0.0;
    double percent2 = 0.0;
    for (i = 1; i < 10000; i++)
    {
        long a = rand();
        long b = rand();
        if ((a - b) < 20 || (b - a) < 20)
        {
            count1++;
        }
        else
        {
            count2++;
        }
    }
    percent1 = count1 / (count1 + count2);
    percent2 = count2 / (count1 + count2);
    printf("percent1=%lf,percent2=%lf\n", percent1, percent2);
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-08-30 13:54
    关注

    两个数之差,这两个数的范围是多少?
    这段代码的主要问题出在第 15 行:if ((a - b) < 20 || (b - a) < 20) ,这个判断条件,每次生成的两个数 a b 都符合这个条件,count1++; 造成最后count1 = 9999,count2 = 0。修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {
        srand((unsigned int)time(NULL));
        int i = 0;
        int count1 = 0;
        int count2 = 0;
        double percent1 = 0.0;
        double percent2 = 0.0;
        for (i = 1; i < 10000; i++)
        {
            long a = rand();
            long b = rand();
            if (abs(a - b) < 20)  //|| (b - a) < 20) 修改
            {
                count1++;
            }
            else
            {
                count2++;
            }
        }
        percent1 = count1 * 1.0 / (count1 + count2);
        percent2 = count2 * 1.0 / (count1 + count2);
        printf("percent1=%%%.2lf,percent2=%%%.2lf\n", percent1 * 100, percent2 * 100);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 已采纳回答 9月1日
  • 创建了问题 8月30日