用C++编写一个程序,模拟掷双骰子(36000次),计算两个骰子值的和。利用一个一维数组记录每个可能的和出现的次数,以表格形式打印结果。同时,判定这些次数是否合理(例如,有6种方式可以得到7,那大约结果中1/6应该是7)。
时间: 2024-10-24 09:09:23 浏览: 29
Ludo:一个可容纳两个,三个或四个玩家的游戏。 在这里,玩家从头到尾赛跑他们的四个棋子,以赢得比赛
在C++中,你可以使用标准库如`<iostream>`、`<ctime>`以及`<array>`来创建这个程序。首先,你需要声明一个数组来存储各和的计数,然后通过循环模拟掷骰子的过程。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <ctime>
#include <array>
const int NUM_ROLLS = 36000;
int dice_sums[NUM_ROLLS + 2]; // 创建数组,范围从2到36
void roll_dice() {
srand(time(0)); // 设置随机种子
int die1 = rand() % 6 + 1; // 掷第一颗骰子,1到6
int die2 = rand() % 6 + 1; // 掷第二颗骰子,1到6
int sum = die1 + die2;
// 更新和的计数
dice_sums[sum]++;
}
int main() {
for (int i = 0; i < NUM_ROLLS; ++i) {
roll_dice();
}
std::cout << "Dice Sums Distribution:\n";
for (int i = 2; i <= 36; ++i) {
std::cout << "Sum: " << i << " - Frequency: " << dice_sums[i] << "\n";
}
// 判断频率是否接近理论概率
double expected_probability[6] = {0, 4, 6, 4, 6, 4}; // 1/6的概率对应于7和11,其他和的概率为1/36
double total_count = 0;
double error_percentage = 0;
for (size_t j = 2; j < sizeof(expected_probability) / sizeof(*expected_probability); ++j) {
double expected_freq = expected_probability[j] * NUM_ROLLS;
double percentage_error = std::abs((dice_sums[j] - expected_freq) / expected_freq);
std::cout << "Expected frequency of Sum " << j << ": " << expected_freq << ", Actual: " << dice_sums[j] << ", Error %: " << percentage_error * 100 << "%\n";
total_count += dice_sums[j];
error_percentage += percentage_error;
}
std::cout << "Total error percentage: " << error_percentage / 5 * 100 << "%\n";
return 0;
}
```
运行此程序后,它会显示骰子和的分布,并检查实际频率是否接近预期的理论概率。注意,由于随机性的存在,误差百分比可能会有些变化,但如果投掷次数足够大,理论上应该接近理想状态。
阅读全文