1. 程式人生 > 其它 >乙級Pat真題1018

乙級Pat真題1018

技術標籤:PAT乙級java

1018 錘子剪刀布 (20分)

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
在這裡插入圖片描述

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。

輸入格式: 輸入第 1 行給出正整數 N(≤10​5),即雙方交鋒的次數。隨後 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

我們通過題目可以分析到以下條件

  1. 輸入甲乙交鋒的次數N,輸入他們每次比評出的是啥,最後輸出甲乙的勝,平,負的次數,還有甲乙的獲勝次數最多的是什麼,注意是勝平負
  2. 如果甲乙獲勝的的最多的手勢解不唯一,則按照字母序最小的輸出
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做出來了,他們用的方法,我不是很瞭解,所以就沒試,待我瞭解一下.

最後,我是三歲啊,大佬又什麼好的解決辦法,歡迎評論區留言,謝謝