剪刀锤子布
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第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
int change(char c)
{
	if (c == 'B') return 0;
	if (c == 'C')return 1;
	if (c == 'J') return 2;
}
int main(){
	int n;
	cin >> n;
	char mp[3] = { 'B', 'C', 'J' };
	int res_A[3] = { 0 }, res_B[3] = { 0 };
	int max_A[3] = { 0 }, max_B[3] = { 0 };
	char ca, cb;
	int ka, kb;
	for (int i = 0; i < n; i++)
	{
		cin >> ca >> cb;   
		ka = change(ca);
		kb = change(cb);   //将甲乙的手势转换为数字
		if ((ka + 1) % 3 == kb)    //如果甲赢,关键
		{
			res_A[0]++;
			res_B[2]++;
			max_A[ka]++;
		}
		else if (ka == kb)
		{
			res_A[1]++;
			res_B[1]++;
		}
		else
		{
			res_A[2]++;
			res_B[0]++;
			max_B[kb]++;
		}
	}
	cout << res_A[0] << res_A[1] << res_A[2];
	cout << res_B[0] << res_B[1] << res_B[2];
	int id1=0, id2=0;
	for (int i = 0; i < 3; i++)
	{
		if (max_A[i]>max_A[id1])   id1 = i;
		if (max_B[i] > max_B[id2])   id2 = i;
	}
	cout << mp[id1] << mp[id2];
	return 0;
}
                    
                
                
            
        
浙公网安备 33010602011771号