题意翻译
贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 s1,s2,s3s_1,s_2,s_3s1,s2,s3。
对于一个有 SSS 个面的骰子每个面上的数字是 1,2,3,…,S1,2,3,\ldots,S1,2,3,…,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。
现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。
数据范围: 2≤s1≤202\le s_1\leq 202≤s1≤20,2≤s2≤202 \leq s_2\leq 202≤s2≤20,2≤s3≤402 \leq s_3\leq 402≤s3≤40。
输入输出样例
输入
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.
import java.util.*;
public class P2911 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
List<Integer> list = new ArrayList<>();
int[][][] temp = new int[a][b][c];
int sum = 0;
for (int i = 0; i < a ; i++) {
for (int j = 0; j < b; j++) {
for (int k = 0; k < c; k++) {
temp[i][j][k] = i+j+k+3;
list.add(temp[i][j][k]);
temp[i][j][k] = 0;
}
}
}
int[] arr = new int[a*b*c];
for (int i = 0; i < a*b*c; i++) {
arr[i] = list.get(i);
}
Arrays.sort(arr);
System.out.print(f(arr));
}
public static int f(int[] a){
int res=0;
Map<Integer , Integer> map=new HashMap<>();
for(int i=0;i<a.length;i++){
if (!map.containsKey(a[i])) {
map.put(a[i], 1);
}else {
map.put(a[i], map.get(a[i])+1);
}
}
int most=0;
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry=(Map.Entry) iterator.next();
int key=(int) entry.getKey();
int value=(int) entry.getValue();
if (value>most) {
res=key;
most=value;
}
}
return res;
}
}