一、题目
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C
代表“锤子”、J
代表“剪刀”、B
代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。
输出格式:
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B
二、解析
很细节(。。。容易晕)的题。要输出两组数,一个是最大获胜手势的次数,一个是甲乙总共的胜&平&负次数。注意一个细节:平局的手势是算赢的。用两个数组分别来存甲乙手势获胜的次数。再用三个额外的变量记录甲胜、平、负的次数,乙和甲明显是相反的。
三、代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int jia[] = new int[3];
int yi[] = new int[3];
int jiaWin = 0, jiaPing = 0, jiaLose = 0;
for (int i = 0; i < n; i++) {
String str[] = br.readLine().split("\\s+");
String a = str[0];
String b = str[1];
if(a.equals("B") && b.equals("C")){
jia[0]++;
jiaWin++;
} else if (a.equals("C") && b.equals("J")) {
jia[1]++;
jiaWin++;
} else if (a.equals("J") && b.equals("B")) {
jia[2]++;
jiaWin++;
} else if (b.equals("B") && a.equals("C")) {
yi[0]++;
jiaLose++;
}else if (b.equals("C") && a.equals("J")) {
yi[1]++;
jiaLose++;
}else if (b.equals("J") && a.equals("B")) {
yi[2]++;
jiaLose++;
}else
jiaPing++;
}
System.out.printf("%d %d %d\n", jiaWin, jiaPing, jiaLose);
System.out.printf("%d %d %d\n", jiaLose, jiaPing, jiaWin);
System.out.printf("%c %c", max(jia[0], jia[1], jia[2]),
max(yi[0], yi[1], yi[2]));
}
public static char max(int b, int c, int j){
if(b >= c && b >= j) return 'B';
if(c > b && c >= j) return 'C';
return 'J';
}
}
标签:yi,java,jia,++,equals,int,1018,&&,basic From: https://www.cnblogs.com/langweixianszu/p/17132775.html