剪刀锤子布

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第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;
}

  

posted @ 2018-07-10 13:31  道微真理  阅读(126)  评论(0)    收藏  举报