[USACO08OCT]牛の骨G

トピックリンク

题目乾燥述目
ベッシーはボードゲームとロールプレイングゲームが大好きなので、ファーマージョンを説得してホビーショップに連れて行き、そこでサイコロを3つ購入しました。これらの公正なサイコロには、S1、S2、およびS3の側面があります

それぞれ(2 <= S1 <= 20; 2 <= S2 <= 20; 2 <= S3 <= 40)。

Bessieは、どの3つのサイコロの合計が最も頻繁に現れるかを把握しようとしています。

3つのサイコロのそれぞれの辺の数を考慮して、どの3つのサイコロの合計が最も頻繁に現れるかを決定します。複数の合計が最も頻繁に表示される可能性がある場合は、そのような最小の合計を報告してください。

ポイント:70

入力フォーマット

  • 1行目:スペースで区切られた3つの整数:S1、S2、およびS3

出力フォーマット

  • 1行目:サイコロをすべての可能な組み合わせで振ったときに最も頻繁に現れる最小の整数の合計。

タイトルの翻訳
ベッシーはボードゲームやロールプレイングゲームをするのが好きなので、ジョンを説得して小さな店に連れて行ってもらい、そこでサイコロを3つ購入しました。これらの3つの異なるサイコロの面番号は、それぞれs_1、s_2、およびs_3です。

SS面のあるサイコロの場合、各面の数字は1、2、3、...、Sです。各顔(上の数字)の確率は同じです。Bessieは、すべての「3辺の数の合計」の中でどの合計が現れる可能性が最も高いかを見つけたいと考えています。

各サイコロの面の数を考えると、どの「3つの面の数の合計」が最も頻繁に表示されるかを見つける必要があります。同じ確率の数が多い場合は、最小のものだけを出力する必要があります。

データ範囲:2≤s1≤20、2≤s2≤20、2≤s3≤40。

サンプル入力と出力の
入力#1
3 2 3
出力#1
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回)表示されるため、5が答えです。

コード:

#include<iostream>
using namespace std;
int main()
{
    
    
	int s1, s2, s3, num[100] = {
    
    0}, maxn = 0, ans;
	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++)
				num[i + j + k]++;
	for(int i = 0; i <= s1 + s2 + s3; i++)
		if(num[i] > maxn)
		{
    
    
			maxn = num[i];
			ans = i;
		}
	cout << ans << endl;
	return 0;
}

おすすめ

転載: blog.csdn.net/qq_44826711/article/details/113748092