PAT_B_1018 錘子剪刀布

題目描述:spa

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,而且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第 1 行給出正整數 N(≤10^​5​​ ),即雙方交鋒的次數。隨後 N 行,每行給出一次交鋒的信息,即甲、乙雙方同時給出的的手勢。C 表明「錘子」、J 表明「剪刀」、B 表明「布」,第 1 個字母表明甲方,第 2 個表明乙方,中間有 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

本人AC代碼:blog

// PAT_1018_錘子剪刀布

# include <stdio.h>

int win_lose(char A, char B)
{
	// 平手 
	if (A==B)
		return 0;
	// 甲勝出 
	else if (A=='C'&&B=='J' || A=='J'&&B=='B' || A=='B'&&B=='C')
		return 1;
	// 乙勝出
	else if (A=='J'&&B=='C' || A=='B'&&B=='J' || A=='C'&&B=='B')
		return -1; 
}

int main(void)
{
	int N; // 記錄遊戲次數 
	int flag;
	char ch1, ch2;
	int win=0, lose=0, draw=0;
	int A_C=0, A_J=0, A_B=0; 
	int B_C=0, B_J=0, B_B=0; 
	int Max_A=0,Max_B=0;
	
	scanf("%d",&N);
	getchar();
	while(N--)
	{
		scanf("%c",&ch1);
		getchar();
		scanf("%c",&ch2);
		getchar();
		
		// 記錄勝負平次數 
		flag = win_lose(ch1, ch2);
		
		if (flag == 0)
			draw++;
		// 甲勝出 
		else if (flag == 1)
		{
			win++;
			switch(ch1) 
			{
				case 'B':A_B++;break;
				case 'J':A_J++;break;
				case 'C':A_C++;break;
				default:break;
			}
		} 
		else if (flag == -1)
		{
			lose++;
			switch(ch2)
			{
				case 'B':B_B++;break;
				case 'J':B_J++;break;
				case 'C':B_C++;break;
				default:break;
			}
		}
	}
	
	printf("%d %d %d\n",win, draw, lose);
	printf("%d %d %d\n",lose, draw, win);
	
	Max_A = (A_C>A_J)?A_C:A_J;
	Max_A = (Max_A>A_B)?Max_A:A_B;
	Max_B = (B_C>B_J)?B_C:B_J;
	Max_B = (Max_B>B_B)?Max_B:B_B;
	
	if (Max_A == A_B)
	{
		printf("B ");
	}
	else if (Max_A == A_C)
	{
		printf("C ");
	}
	else if (Max_A == A_J)
	{
		printf("J ");
	}
	
	if (Max_B == B_B)
	{
		printf("B");
	}
	else if (Max_B == B_C)
	{
		printf("C");
	}
	else if (Max_B == B_J)
	{
		printf("J");
	}
	
	return 0;
}

  

RRR遊戲

相關文章
相關標籤/搜索