学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总_热爱编程的通信人的博客-CSDN博客
【题目描述】
贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 s1,s2,s3。
对于一个有 S 个面的骰子每个面上的数字是 1,2,3,…,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。
现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。
数据范围: 2≤s1≤20,2≤s2≤20,2≤s3≤40。
【输入】
* Line 1: Three space-separated integers: S1, S2, and S3
【输出】
* Line 1: The smallest integer sum that appears most frequently when the dice are rolled in every possible combination.
【输入样例】
3 2 3
【输出样例】
5
说明/提示
Here are all the possible outcomes.
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
Both 5 and 6 appear most frequently (five times each), so 5 is the answer.
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int s1,s2,s3,a[85]={0};
cin >> s1 >> s2 >> s3;
for (int i=1; i<=s1; i++) {
for (int j=1; j<=s2; j++) {
for (int k=1; k<=s3; k++) {
a[i+j+k]++;
}
}
}
int max=a[3], ans=3;
for (int i=3; i<=s1+s2+s3; i++) {
if (a[i]>max) {
max = a[i];
ans = i;
}
}
cout << ans;
return 0;
}
【运行结果】
3 2 3
5