C++大学教程(第九版)7.16 掷双骰

文章目录

  • 题目
  • 代码
  • 运行截图

题目

(掷双)编写一个程序,模拟掷两个子,然后计算两个子值的和注意:由于每个骰子显示1-6之间的一个整数值,因此这两个值的和在2-12之间变动其中7是出现频率最高的值,而2和12是出现频率最低的值。图7.26显示这两个子值的36种可能的组合。程序应该掷这两个骰子36000次。
请利用一个一维array对象记录每个可能的和出现的次数。
以表格的形式打印结果。
同时,判定这些次数的统计值是否合理(也就是说,有6种方式可以掷到7,因此所有掷出的和值中,大约有1/6应该是7)。
C++大学教程(第九版)7.16 掷双骰_第1张图片

代码

// 7.16 掷双骰
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

unsigned int rollDice(); // 掷骰子

int main()
{
    srand(static_cast<unsigned int>(time(0)));
    const int arraySize = 13;
    array<int, arraySize> a1 = {0}; // 用于存储每种可能的和出现的次数

    for (unsigned int i = 0; i < 36000; ++i)
    { // 控制循环次数
        int sum = rollDice();
        a1[sum] += 1;
    }

    for (size_t j = 2; j < arraySize; ++j)
    {
        cout << j << "出现的次数是:" << a1[j] << endl;
    }
    for (size_t m = 2; m < arraySize; m++)
    { // 判断次数统计值是否合理

        double t1 = static_cast<double>(a1[m]) / 36000; // 记录实际概率
        double t2;                                      // 记录理想的概率

        if (m < 7)
            t2 = (m - 1) * 1.0 / 36;
        else
            t2 = (14 - m - 1) * 1.0 / 36;

        cout << setprecision(7) << fixed;
        
        if (fabs(t1 - t2) < 0.009)
        {
            cout << m << "出现的次数概率是" << t1 << " 理想的概率是" << t2 << "  ";
            cout << "次数的统计值比较合理\n";
        }
        else
            cout << "统计值的概率和实际值相差了" << fabs(t1 - t2) << " 是不合理的。\n";
    }

    return 0;
}

unsigned int rollDice() // 掷双骰
{

    unsigned int die1 = 1 + rand() % 6;
    unsigned int die2 = 1 + rand() % 6;

    unsigned int sum = die1 + die2;
    
    return sum;
}

运行截图

C++大学教程(第九版)7.16 掷双骰_第2张图片

你可能感兴趣的:(C++大学教程,c++,开发语言)