1. 程式人生 > >1018 錘子剪刀布 (20 分)

1018 錘子剪刀布 (20 分)

1018 錘子剪刀布 (20 分)

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

FigCJB.jpg

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

輸入格式:

輸入第 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

程式碼:

#include<stdio.h>

int sum(int an[3][3], int n) {
	return an[0][n]+an[1][n]+an[2][n];
} 

void res(int h[3][3]) {
	if(h[1][0]>h[0][0] && h[1][0]>h[2][0]) {
		printf("J");
	} else if(h[0][0]>h[2][0]) {
		printf("C");
	} else {
		printf("B");
	}
}
int main() {
	int N;
	scanf("%d", &N);
	int a[3][3] = {0}, b[3][3] = {0}; //C 代表“錘子”(0)、J 代表“剪刀”(1)、B 代表“布”(2);勝(1)、平(0)、負(2)
	char A , B;
	while(N) {
		getchar(); 
		scanf("%c %c", &A, &B);
		if(A == 'C') {
			if(B == 'C') {
				a[0][1]++;
				b[0][1]++;
			} else if(B == 'J') {
				a[0][0]++;
				b[1][2]++;
			} else {
				a[0][2]++;
				b[2][0]++;
			}
		} else if(A == 'J') {
				if(B == 'C') {
				a[1][2]++;
				b[0][0]++;
			} else if(B == 'J') {
				a[1][1]++;
				b[1][1]++;
			} else {
				a[1][0]++;
				b[2][2]++;
			}
		} else {
			if(B == 'C') {
				a[2][0]++;
				b[0][2]++;
			} else if(B == 'J') {
				a[2][2]++;
				b[1][0]++;
			} else {
				a[2][1]++;
				b[2][1]++;
			}
		}
		N--;
	} 
	
	printf("%d %d %d\n", sum(a, 0), sum(a, 1), sum(a, 2));
	printf("%d %d %d\n", sum(b, 0), sum(b, 1), sum(b, 2));
	
	res(a);
	printf(" ");
	res(b);
	
	return 0;
}