[USACO08OCT]Bovine Bones G

Topic link

题目描述
Bessie loves board games and role-playing games so she persuaded Farmer John to drive her to the hobby shop where she purchased three dice for rolling. These fair dice have S1, S2, and S3 sides

respectively (2 <= S1 <= 20; 2 <= S2 <= 20; 2 <= S3 <= 40).

Bessie rolls and rolls and rolls trying to figure out which three-dice sum appears most often.

Given the number of sides on each of the three dice, determine which three-dice sum appears most frequently. If more than one sum can appear most frequently, report the smallest such sum.

POINTS: 70

Input format

  • Line 1: Three space-separated integers: S1, S2, and S3

Output format

  • Line 1: The smallest integer sum that appears most frequently when the dice are rolled in every possible combination.

Translation of the title
Bessie likes to play board games and role-playing games, so she persuaded John to drive her to the small shop. There she bought three dice. The face numbers of these three different dice are s_1, s_2, and s_3 respectively.

For a dice with SS faces, the numbers on each face are 1, 2, 3,...,S. Each face (the number above) has an equal probability. Bessie hopes to find out which sum has the greatest probability of appearing among all the "sums of numbers on three sides".

Now given the number of faces of each dice, we need to find out which "sum of numbers on three faces" appears most frequently. If there are many with the same probability, then only the smallest one needs to be output.

Data range: 2 ≤ s1​ ≤20, 2 ≤ s2 ≤20, 2 ≤ s3​ ≤40.

Sample input and output
Input #1
3 2 3
Output #1
5
Explanation/Reminder
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.

Code:

#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;
}

Guess you like

Origin blog.csdn.net/qq_44826711/article/details/113748092