用c++写代码,要求是贝茜喜欢棋盘游戏和角色扮演游戏,所以她说服了农夫约翰 开车送她去玩物店,在那里她买了三个掷骰子的骰子。这些公平的骰子 有S1 S2 S3边吗 分别(2 <= S1 <= 20;2 <= S2 <= 20;2 <= S3 <= 40)。贝西掷啊掷啊掷,试图找出哪三个骰子的总和出现得最多 经常。给定三个骰子的面数,确定三个骰子的和 出现频率最高。如果出现次数最多的金额不止一个,请报告 最小的总和。输入格式 第1行:三个空格分隔的整数:S1、S2和S3。输出格式 第1行:掷骰子时出现次数最多的最小整数和 在每一个可能的组合中。
时间: 2024-02-06 15:09:02 浏览: 20
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int s1, s2, s3;
cin >> s1 >> s2 >> s3;
vector<int> freq(s1 + s2 + s3 + 1, 0);
for (int i = 1; i <= s1; i++) {
for (int j = 1; j <= s2; j++) {
for (int k = 1; k <= s3; k++) {
freq[i + j + k]++;
}
}
}
int max_freq = 0;
for (int i = 3; i <= s1 + s2 + s3; i++) {
max_freq = max(max_freq, freq[i]);
}
for (int i = 3; i <= s1 + s2 + s3; i++) {
if (freq[i] == max_freq) {
cout << i << endl;
break;
}
}
return 0;
}
```
代码思路:
1. 首先输入三个骰子的面数 s1、s2、s3。
2. 定义一个长度为 s1 + s2 + s3 + 1 的数组 freq,用来记录每个和出现的频率,数组下标表示和的大小。
3. 三重循环遍历所有可能的和,并将其对应的 freq 数组值增加 1。
4. 遍历 freq 数组,找出最大的频率 max_freq。
5. 再次遍历 freq 数组,输出第一个出现频率等于 max_freq 的和。
时间复杂度为 O(s1 * s2 * s3),空间复杂度为 O(s1 + s2 + s3)。