洛谷刷题C++语言 | P2911 Bovine Bones G

学习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

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/132675974