ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

pat 乙级 1018 锤子剪刀布(C++)

2021-02-13 16:57:04  阅读:207  来源: 互联网

标签:count pat ch1 ++ C++ else int ch2 1018


题目

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

输入格式:

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

分析

  • 求解双方胜、负、平次数,只需每次输入数据时进行判断然后累加即可,注意一人胜另一人负。
  • 求解双方胜利次数最多的手势,且如果解不唯一,选择字母序小的。可用数组下标来顺序对应B、C、J来解决。
  • 可使用一个结构体来存储,成员包括victory,draw,defeat,count[3]。声明两个结构体变量时,声明为全局变量。这样编译器会将变量初始化,不用再自己另外再初始化。

AC代码

#include<iostream>
using namespace std;
struct node
{
    int count[3];
    int victory,draw,defeat;
}A,B;
int game(char A,char B)
{
    if(A==B)
        return 0;
    else if((A=='C'&&B=='J')||(A=='B'&&B=='C')||(A=='J'&&B=='B'))
        return 1;
    else
        return 2;
}

int main()
{
    int i,N;
    char ch1,ch2; 
    cin>>N;
    for(i=0;i<N;i++)
    {
        cin>>ch1>>ch2;
        int temp=game(ch1,ch2);
        if(temp==0)
        {
        	A.draw++;
        	B.draw++;
		}
		else if(temp==1)
		{
			A.victory++;
			B.defeat++; 
			if(ch1=='B')
				A.count[0]++;	
			else if(ch1=='C')
				A.count[1]++;
			else
				A.count[2]++;
		}
		else
		{
			B.victory++;
			A.defeat++;
			if(ch2=='B')
				B.count[0]++;	
			else if(ch2=='C')
				B.count[1]++;
			else
				B.count[2]++;
		}
        	
    }
    
    cout<<A.victory<<" "<<A.draw<<" "<<A.defeat<<endl;
	cout<<B.victory<<" "<<B.draw<<" "<<B.defeat<<endl;
    int max_A=A.count[0],max_B=B.count[0],flag1=0,flag2=0;
    for(i=1;i<3;i++)
    {
    	if(A.count[i]>max_A)
    	{
    		max_A=A.count[i];
    		flag1=i; 
		}
		
		if(B.count[i]>max_B)
    	{
    		max_B=B.count[i];
    		flag2=i; 
		}		
	}
    if(flag1==0) 
		cout<<"B ";
	else if(flag1==1)
		cout<<"C ";
	else
		cout<<"J ";
    if(flag2==0) 
        cout<<"B";
    else if(flag2==1)
        cout<<"C";
    else
        cout<<"J";
	return 0;
}

如果小伙伴有任何问题或者建议,欢迎评论区留言或者私信博主哦

更多题解
pat 乙级 题解汇总(持续更新)(C++)

标签:count,pat,ch1,++,C++,else,int,ch2,1018
来源: https://blog.csdn.net/hl3129450985/article/details/113801667

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有