PAT1018錘子剪刀布

TNTZS666發表於2019-01-18

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344

題目描述:

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

在這裡插入圖片描述

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


  • 輸入格式
    輸入第 1 行給出正整數 N(≤10​^5​​ ),即雙方交鋒的次數。隨後 N 行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。C 代表“錘子”、J 代表“剪刀”、B 代表“布”,第 1 個字母代表甲方,第 2 個代表乙方,中間有 1 個空格。

  • 輸出格式
    輸出第 1、2 行分別給出甲、乙的勝、平、負次數,數字間以 1 個空格分隔。第 3 行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有 1 個空格。如果解不唯一,則輸出按字母序最小的解。


解題思路:這道題不難,但是輸出條件要考慮到很多約束,主要考察我們能不能考慮全面吧。輸出甲乙勝次最多的手勢的時候採用三目運算能大大減少程式碼量。


程式:

#include<iostream>
using namespace std;
int main()
{
	int N;
	cin>>N;
	int awin=0,aping=0,alose=0;
	int aC=0,aJ=0,aB=0,bB=0,bC=0,bJ=0;
	for(int i=0;i<N;i++){
  	char x,y;
  	cin>>x>>y;
 		if (x=='C'&&y=='J') {
			awin++;
			aC++;
		}
		if (x=='C'&&y=='C') {
			aping++;
		}
		if (x=='C'&&y=='B') {
			alose++;
			bB++;
		}
		if (x=='J'&&y=='B') {
			awin++;
			aJ++;
		}
		if (x=='J'&&y=='J') {
			aping++;
		}
		if (x=='J'&&y=='C') {
			alose++;
			bC++;
		}
		if (x=='B'&&y=='C') {
			awin++;
			aB++;
		}
		if (x=='B'&&y=='B') {
			aping++;
		}
		if (x=='B'&&y=='J') {
			alose++;
			bJ++;
		}
	}
	cout<<awin<<" "<<aping<<" "<<alose<<endl;
	cout<<alose<<" "<<aping<<" "<<awin<<endl;
	int maxa=(aB>aC?(aB>aJ?aB:aJ):(aC>aJ?aC:aJ)); 
	int maxb=(bB>bC?(bB>bJ?bB:bJ):(bC>bJ?bC:bJ)); 
	string s1=(maxa==aB?"B ":(maxa==aC?"C ":"J "));
	string s2=(maxb==bB?"B":(maxb==bC?"C":"J"));
	cout<<s1<<s2;

}	

相關文章