洛谷-P2911 [USACO08OCT]Bovine Bones G
作者:互联网
洛谷-P2911 [USACO08OCT]Bovine Bones G
题目描述
贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 \(s_1,s_2,s_3\)。
对于一个有 \(S\) 个面的骰子每个面上的数字是 \(1,2,3,\ldots,S\)。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。
现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。
数据范围: \(2\le s_1\leq 20\),\(2 \leq s_2\leq 20\),\(2 \leq s_3\leq 40\)。
输入格式
第1行:三个以空格分隔的整数:S1,S2和S3。
输出格式
第1行:以每种可能的组合掷骰子时出现频率最高的最小整数和。
输入输出样例
输入 #1
3 2 3
输出 #1
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.
C++代码
#include <iostream>
using namespace std;
int main() {
int s1, s2, s3, ans=3;
cin >> s1 >> s2 >> s3;
int a[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)
++a[i+j+k];
for (int i=4; i<=s1+s2+s3; ++i)
if (a[ans] < a[i])
ans = i;
cout << ans << endl;
return 0;
}
标签:骰子,s3,洛谷,int,s2,P2911,leq,Bones 来源: https://www.cnblogs.com/yuzec/p/13364297.html