Quartz xamarin canvas redis常用语句 ios4 grunt 网赚教程下载 jquery延时 js获取数组第一个元素 ceb转换成pdf在线转换 java解析pdf plsql连接mysql 安装python教程 python如何实现多线程 python的random函数 python等待10秒 java数据 java的substring java接口类 java课程 java自定义异常 java怎么安装 java常用数据结构 linux密码忘记 迷宫解锁 qq飞车剧情辅助 销售单打印软件 微信小程序提示框 cms教程 fdisk下载 苹果放大镜 adobe卸载工具 燃烧之血十字架 服务器下载 ps怎么磨皮祛痘 苹果x怎么用 js压缩图片 祸星龙 微博实名认证 冲击波专杀
当前位置: 首页 > 学习教程  > 编程语言

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

2021/2/13 16:34:32 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

题目 两人玩锤子剪刀布,现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤105 ),即双方交锋的次数。随后 N …

题目

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

输入格式:

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


本文链接: http://www.dtmao.cc/news_show_700055.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?