1. 程式人生 > >PAT乙級Java實現_1018 錘子剪刀布 (20) _附詳細解題註釋_18

PAT乙級Java實現_1018 錘子剪刀布 (20) _附詳細解題註釋_18

1018 錘子剪刀布 (20)(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
作者: CHEN, Yue單位: PAT聯盟時間限制: 100ms記憶體限制: 64MB程式碼長度限制: 16KB
package pat_b;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
//邏輯還是比較簡單的
public class PAT_B_1018
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String[] first  = in.readLine().split("\\s+");
		int n = Integer.valueOf(first[0]);//猜拳的次數
		
		int cntJiaJ = 0, cntJiaC = 0, cntJiaB = 0;//甲出剪刀、錘子、布贏的次數
		int cntYiJ = 0, cntYiC = 0, cntYiB = 0;//乙出剪刀、錘子、布贏的次數
		for(int i = 0; i < n; i++)//猜拳的次數
		{
			String[] input = in.readLine().split("\\s+");
			//通過甲乙的出拳情況判斷誰贏,並更新甲/乙某種出拳贏的次數
			if(input[0].charAt(0) == 'J')
			{
				if(input[1].charAt(0) == 'J')
				{
					
				}
				else if(input[1].charAt(0) == 'C')
				{
					cntYiC++;
				}
				else if(input[1].charAt(0) == 'B')
				{	
					cntJiaJ++;
				}
			}
			else if(input[0].charAt(0) == 'C')
			{
				if(input[1].charAt(0) == 'J')
				{
					cntJiaC++;
				}
				else if(input[1].charAt(0) == 'C')
				{
					
				}
				else if(input[1].charAt(0) == 'B')
				{	
					cntYiB++;
				}
			}
			else if(input[0].charAt(0) == 'B')
			{
				if(input[1].charAt(0) == 'J')
				{
					cntYiJ++;
				}
				else if(input[1].charAt(0) == 'C')
				{
					cntJiaB++;
				}
				else if(input[1].charAt(0) == 'B')
				{	
				
				}
			}
		}
		
		int cntJia = cntJiaJ+cntJiaC+cntJiaB;//甲贏的次數
		int cntYi = cntYiJ+cntYiC+cntYiB;//乙贏的次數
		int cntHe = n - cntJia - cntYi;//和局的次數
		
		System.out.println(""+cntJia+" "+cntHe+" "+cntYi);
		System.out.println(""+cntYi+" "+cntHe+" "+cntJia);
		
		printMax(cntJiaJ,cntJiaC,cntJiaB);
		System.out.print(" ");
		printMax(cntYiJ,cntYiC,cntYiB);
		
	}
	
	public static void printMax(int cntJ, int cntC, int cntB)//通過甲/乙三種出拳手勢贏的次數判斷哪種手勢贏的次數最多
	{
		if(cntB >= cntJ && cntB >= cntC)
			System.out.print("B");
		else if(cntC > cntB && cntC >= cntJ)
			System.out.print("C");
		else if(cntJ > cntB && cntJ > cntC)
			System.out.print("J");
	}
}