PAT乙級1018:錘子剪刀布

在這裏插入圖片描述
在這裏插入圖片描述
解法一:

#include <iostream>
#include <vector>

using namespace std;


int judge(char a, char b)
{
	//end==0表示平局,end==1表示甲贏,end==2表示乙贏
	int end = 0;
	if (a==b)
	{
		end = 0;
	}
	else if ((a=='C'&&b=='J')||(a=='J'&&b=='B')||(a=='B'&&b=='C'))
	{
		end = 1;
	}
	else
	{
		end = 2;
	}
	return end;
}

int main()
{
	int N = 0;
	cin >> N;
	int i = 0;
	char j, y;
	int m=0, n=0, m1=0, m2=0, m3=0, n1=0, n2=0, n3 = 0; //m,n分別代表甲,乙贏的次數,m1,m2,m3,n1,n2,n3爲甲乙分別出錘子,剪刀,布時贏的次數
	int p = 0;					  //p分別代表甲乙平的次數

	vector<char>v1;
	vector<char>v2;

	for ( i = 0; i < N; i++)
	{
		cin >> j >> y;
		v1.push_back(j);
		v2.push_back(y);
	} 
	for ( i = 0; i < N; i++)
	{
		if (judge(v1[i],v2[i])==1)
		{
			m++;
			if (v1[i]=='C')
			{
				m1++;
			}
			else if(v1[i]=='J')
			{
				m2++;
			}
			else if (v1[i]=='B')
			{
				m3++;
			}
		}
		else if(judge(v1[i], v2[i]) == 2)
		{
			n++;
			if (v2[i] == 'C')
			{
				n1++;
			}
			else if (v2[i] == 'J')
			{
				n2++;
			}
			else if (v2[i] == 'B')
			{
				n3++;
			}
		}
		else
		{
			p++;
		}
	}

	cout << m << " " << p << " " << n << endl;
	cout << n << " " << p << " " << m << endl;

	if (m3>=m2&&m3>=m1)
	{
		cout << "B ";
	}
	else if (m1>=m2)
	{
		cout << "C ";
	}
	else
	{
		cout << "J ";
	}

	if (n3>=n2&&n3>=n1)
	{
		cout << "B" << endl;
	}
	else if (n1>=n2)
	{
		cout << "C" << endl;
	}
	else
	{
		cout << "J" << endl;
	}
	return 0;
}

解法二:

#include<iostream>
#include<map>

using namespace std;
 
int judge(int a,int b){
      if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==1)) return 1;//甲勝
      if((b==1&&a==2)||(b==2&&a==3)||(b==3&&a==1)) return 2;//乙勝
      else if(a==b) return 3;//平局
}
 
int find_max(int c[]){
      int mx = 0,ans;
      for(int i=3;i>0;i--){
            if(c[i]>=mx){
                  mx = c[i];
                  ans = i;
            }
      }
      return ans;
}
 
int main(){
      map<char,int> mp;
      mp['B'] = 1;//按字母序小的方式賦值
      mp['C'] = 2;
      mp['J'] = 3;
      int n,i;
      char jia,yi;
      int jia_win=0,jia_lose=0,jia_draw=0;
      int yi_win=0,yi_lose=0,yi_draw=0;
      cin>>n;
      int jia_counter[4] = {0};
      int yi_counter[4] = {0};
      for(i=0;i<n;i++){
            cin>>jia>>yi;
            int temp = judge(mp[jia],mp[yi]);
            if(temp == 1){
                  jia_win++;yi_lose++;jia_counter[mp[jia]]++;
            }
            if(temp == 2){
                  jia_lose++;yi_win++;yi_counter[mp[yi]]++;
            }
            else if(temp == 3){
                        jia_draw++;yi_draw++;
            }
      }
      int ans1 = find_max(jia_counter);
      int ans2 = find_max(yi_counter);
      //cout<<ans1<<" "<<ans2<<endl;
      cout<<jia_win<<" "<<jia_draw<<" "<<jia_lose<<endl;
      cout<<yi_win<<" "<<yi_draw<<" "<<yi_lose<<endl;
      for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++)
	{
		if(it->second==ans1)
			cout<<it->first<<" ";
	}
	for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++)
	{
		if(it->second==ans2)
			cout<<it->first;
	}
      return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章