题目描述:
贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 s1,s2,s3。
对于一个有 SS 个面的骰子每个面上的数字是 1,2,3,\ldots,S1,2,3,…,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。
现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。
数据范围:
2≤s1,s2,s3≤20
输入样例:
3 2 3
输出样例:
5
提示:
下面是所有的方案
1 1 1 -> 3
1 2 1 -> 4
2 1 1 -> 4
2 2 1 -> 5
3 1 1 -> 5
3 2 1 -> 6
1 1 2 -> 4
1 2 2 -> 5
2 1 2 -> 5
2 2 2 -> 6
3 1 2 -> 6
3 2 2 -> 7
1 1 3 -> 5
1 2 3 -> 6
2 1 3 -> 6
2 2 3 -> 7
3 1 3 -> 7
3 2 3 -> 8
5和6最多,输出5
思路:
一一枚举,三重循环,map记录次数,打擂台找大值
以下代码:
#include <bits/stdc++.h>
using namespace std;
int a, b, c, mx, s;
map<int, int> m;
int main () {
cin >> a >> b >> c;
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
for (int k = 1; k <= c; k++) {
m[i + j + k]++;
if (m[i + j + k] > mx) {
mx = m[i + j + k];
s = i + j + k;
}
}
}
}
cout << s;
return 0;
}