PTA乙級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

代碼如下:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main(void) {
	int Awin=0, Aloss=0, Alegel=0, Bwin=0, Bloss=0, Blegel=0;
	int K;
	char A, B;
	int  ANum[3], BNum[3];
	scanf("%d", &K);
	for (int i = 0; i < 3; i++) {
		ANum[i] = 0;
		BNum[i] = 0;
	}
	for (int i = 0; i < K; i++) {
		scanf(" %c %c", &A, &B);
		if (A == B) {
			Alegel++;
			Blegel++;
		}
		else if ((A == 'C' && B == 'J') || (A == 'J' && B == 'B') || (A == 'B' && B == 'C')) {
			Awin++;
			Bloss++;
			if (A == 'C') {
				ANum[1]++;
			}
			else if (A == 'J') {
				ANum[2]++;
			}
			else
				ANum[0]++;

		}
		else {
			Aloss++;
			Bwin++;
			if (B == 'C') {
				BNum[1]++;
			}
			else if (B == 'J') {
				BNum[2]++;
			}
			else
				BNum[0]++;
		}
	}
	int NumberA=0, NumberB=0;
	int max;
	max = ANum[0];
	for (int i = 0; i < 3; i++) {
		if (max < ANum[i]) {
			max = ANum[i];
			NumberA = i;
		}
	}

	max = BNum[0];
	for (int i = 0; i < 3; i++) {
		if (max < BNum[i]) {
			max = BNum[i];
			NumberB = i;
		}
	}

	printf("%d %d %d\n", Awin, Alegel, Aloss);
	printf("%d %d %d\n", Bwin, Blegel, Bloss);

	if (NumberA == 0) {
		printf("B ");
	}
	else if (NumberA == 1) {
		printf("C ");
	}
	else 
		printf("J ");


	if (NumberB == 0) {
		printf("B");
	}
	else if (NumberB == 1) {
		printf("C");
	}
	else
		printf("J");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章