1018 锤子剪刀布 (20 分)

原题链接

思路

就是按顺序输入,写六个if判断每种情况,然后记录甲赢的次数和乙赢的次数,甲的次数就是乙输的次数,反之同理,然后开了两个数组a,b分别记录甲乙赢的时候出的是什么,出了几次,123分别代表BCJ,最后输出时写if判断即可,不用想复杂了用循环写。

坑点

注意如果一个人1次都没赢的话应该也输出B才对。

代码

#include<bits/stdc++.h>
using namespace std;
int a[10] = {0}; //甲,获胜 出的手势的次数,  
int b[10] = {0}; //乙,获胜 出的手势的次数,
int main()
{
	  
	int jiayin = 0, yiyin = 0;; 
	int n;
	cin >> n;
	for (int i = 1; i <= n; i ++ )
	{
		char x, y;
		cin >> x >> y;
                //6种情况
		if (x == 'C' && y == 'J')
		{
			jiayin ++;
			a[2] ++;
		}
		else if (x == 'J' && y == 'C')
		{
			yiyin ++;
			b[2] ++;
		}
		else if (x == 'C' && y == 'B')
		{
			yiyin ++;
			b[1] ++;
		}
		else if (x == 'B' && y == 'C')
		{
			jiayin ++;
			a[1] ++;
		}
		else if (x == 'J' && y == 'B')
		{
			jiayin ++;
			a[3] ++;
		}
		else if (x == 'B' && y == 'J')
		{
			yiyin ++;
			b[3] ++;
		}
	}
	cout << jiayin << " " << n - jiayin - yiyin << " " << yiyin << endl;
	cout << yiyin << " " << n - jiayin - yiyin << " " << jiayin << endl;
        //判断出赢得次数最多的手势
	if (a[1] >= a[2] && a[1] >= a[3]) cout << "B ";
	else if (a[2] > a[1] && a[2] >= a[3]) cout << "C ";
	else if (a[3] > a[2] && a[3] > a[1]) cout << "J ";

	if (b[1] >= b[2] && b[1] >= b[3]) cout << "B";
	else if (b[2] > b[1] && b[2] >= b[3]) cout << "C";
	else if (b[3] > b[2] && b[3] > b[1]) cout << "J";
//	int minn = -1;
//	int f = 0;
//	for (int i = 1; i <= 3; i ++ )
//	{
		cout << a[i] << " ";
//		if (a[i] > minn) 
//		{
//			minn = a[i];
//			f = i;
//		}
//	}
	if (f == 0) cout << "  ";
//	if (f == 1) cout << "B ";
//	if (f == 2) cout << "C ";
//	if (f == 3) cout << "J ";
//	minn = -1;
//	f = 0;
//	for (int i = 1; i <= 3; i ++ )
//	{
//		if (b[i] > minn) 
//		{
//			minn = a[i];
//			f = i;
//		}
//	}
	if (f == 0) cout << "  ";
//	if (f == 1) cout << "B";
//	if (f == 2) cout << "C";
//	if (f == 3) cout << "J";
	return 0;
}

总结

做的时候因为比大小那块可能想复杂了,用了循环写,导致出现了问题,后来改用了if判断就好了。在这些要比较的数量极少且条件按很多时,还是用if写方便又省心。

上一篇:Java异常机制和异常类型表


下一篇:LeetCode进阶之路(一)用java做LeetCode的基本方法