乙級Pat真題1018
阿新 • • 發佈:2021-01-27
1018 錘子剪刀布 (20分)
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式: 輸入第 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
我們通過題目可以分析到以下條件
- 輸入甲乙交鋒的次數N,輸入他們每次比評出的是啥,最後輸出甲乙的勝,平,負的次數,還有甲乙的獲勝次數最多的是什麼,注意是勝平負
- 如果甲乙獲勝的的最多的手勢解不唯一,則按照字母序最小的輸出
import java.io.*;
public class C_18 {
public static void main(String[] args) throws Exception {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String N=br.readLine();
String[] result;
int[] first = new int[3];
int[] second = new int[3];
int[] first_arr = new int[3];
int[] second_arr = new int[3];
for (int i = 0; i <Integer.parseInt (N); i++) {
String check =br.readLine();
result = check.split(" ");
if (result[0].equals(result[1])) {
first[2]++;
second[2]++;
}
if ((result[0].equals("C") && result[1].equals("J")) || (result[0].equals("J") && result[1].equals("B")) || (result[0].equals("B") && result[1].equals("C"))) {
first[0]++;
second[1]++;
if (result[0].equals("B"))
first_arr[0]++;
if (result[0].equals("C"))
first_arr[1]++;
if (result[0].equals("J"))
first_arr[2]++;
} else if ((result[0].equals("J") && result[1].equals("C")) || (result[0].equals("C") && result[1].equals("B")) || (result[0].equals("B") && result[1].equals("J"))) {
first[1]++;
second[0]++;
if (result[1].equals("B"))
second_arr[0]++;
if (result[1].equals("C"))
second_arr[1]++;
if (result[1].equals("J"))
second_arr[2]++;
}
}
System.out.print(first[0] + " " + first[2] + " " + first[1] + "\n");
System.out.print(second[0] + " " + second[2] + " " + second[1] + "\n");
Judge(first_arr);
System.out.print(" ");
Judge(second_arr);
}
public static void Judge(int[] arr){
int Max=0;
if(arr[0]>=arr[1]&&arr[0]>=arr[2])
Max=0;
else if(arr[1]>=arr[2]&&arr[1]>arr[0])
Max=1;
else Max=2;
switch (Max) {
case 0:
System.out.print("B");
break;
case 1:
System.out.print("C");
break;
case 2:
System.out.print("J");
break;
}
}
}
條件就像上面說的那樣,我寫這道題倒是發現了我的一些問題,字串的比較不能用等於號來比較,得用equals來,因為這個我debug半天,最後才意識到,害.
這道題Java最後一個測試過不去,但我看見其他大佬用Java做出來了,他們用的方法,我不是很瞭解,所以就沒試,待我瞭解一下.
最後,我是三歲啊,大佬又什麼好的解決辦法,歡迎評論區留言,謝謝