(乙)1018 锤子剪刀布 (20 分)

2024-04-11 15:32
文章标签 20 锤子 剪刀 1018

本文主要是介绍(乙)1018 锤子剪刀布 (20 分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

FigCJB.jpg

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

输入格式:

输入第 1 行给出正整数 N(≤10​5​​),即双方交锋的次数。随后 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

 题意:

给你一个N ,后面有N组游戏的手势,让你分别求出来这两个人胜,平,负各有多少局,然后再计算出这两个人用什么手势赢的局数最多;注意输出格式;

思路:

就是一道简单的模拟题,最近脑袋有点混沌,代码写完后自己定睛一看,什么东西,看不懂;什么思路,不知道;数组存什么东西,不清楚。。。。。。。

把每一种情况都模拟一下,用数组记录结果,一定要细心,不然容易把自己绕进去。。。。。泪目。。。。

只需要计算出来一个人的胜,平,负,另一个人和他相反;

代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;struct node
{char x;char y;
} a[101000];int n;
int q[4];//记录第一个人胜利的情况;q[1],q[2],q[3]分别代表用锤子,剪刀,布赢的次数;
int p[4];//记录第二个人胜利的情况;p[1],p[2],p[3]分别代表用锤子,剪刀,布赢的次数;
int s[4];//记录第一个人的胜,平,负局的情况;s[1],s[2],s[3]分别代表胜,平,负局;void solve1()//查找第一个人胜的次数最多的手势;
{             //注意题目的要求:如果解不唯一,则输出按字母序最小的解。int flag=3,maxx=q[3];//所以要优先搜索布,锤子,剪刀;if(q[1]>maxx){maxx=q[1];flag=1;}if(q[2]>maxx){maxx=q[2];flag=2;}if(flag==1)printf("C ");else if(flag==2)printf("J ");else if(flag==3)printf("B ");return ;
}void solve2()//查找第二个人胜利次数最多的手势;同上;
{int flag=3,maxx=p[3];if(p[1]>maxx){maxx=p[1];flag=1;}if(p[2]>maxx){maxx=p[2];flag=2;}if(flag==1)printf("C\n");else if(flag==2)printf("J\n");else if(flag==3)printf("B\n");return ;
}int main()
{while(~scanf("%d",&n)){memset(q,0,sizeof q);memset(p,0,sizeof p);memset(s,0,sizeof s);for(int i=0; i<n; i++){getchar();//记得吸收字符;scanf("%c %c",&a[i].x,&a[i].y);if(a[i].x=='C'){if(a[i].y=='C')s[2]++;//平局;else if(a[i].y=='J'){s[1]++;//赢局;q[1]++;//记录下第一个人用什么手势赢;}else if(a[i].y=='B'){s[3]++;//输局;}}else if(a[i].x=='J'){if(a[i].y=='J')s[2]++;//平局;else if(a[i].y=='B'){s[1]++;//赢局;q[2]++;//记录下用什么手势赢;}else if(a[i].y=='C'){s[3]++;//输局;}}else if(a[i].x=='B'){if(a[i].y=='B')s[2]++;//平局;else if(a[i].y=='C'){s[1]++;//赢局;q[3]++;//记录下用什么手势赢;}else if(a[i].y=='J'){s[3]++;//输局;}}//因为赢,平,输局都是两个人相对的,就不用判断第二个人的情况了;if(a[i].y=='C')//直接判断第二个人用什么手势赢的局数多就可以了;{if(a[i].x=='J')p[1]++;}else if(a[i].y=='J'){if(a[i].x=='B'){p[2]++;}}else if(a[i].y=='B'){if(a[i].x=='C'){p[3]++;}}}for(int i=1; i<=2; i++)//注意输出格式;printf("%d ",s[i]);printf("%d\n",s[3]);for(int i=3; i>=2; i--)printf("%d ",s[i]);printf("%d\n",s[1]);solve1();solve2();}return 0;
}

 

这篇关于(乙)1018 锤子剪刀布 (20 分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894474

相关文章

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

【语句】如何将列表拼接成字符串并截取20个字符后面的

base_info = "".join(tree.xpath('/html/head/script[4]/text()'))[20:] 以下是对这个语句的详细讲解: tree.xpath('/html/head/script[4]/text()')部分: tree:通常是一个已经构建好的 HTML 文档树对象,它是通过相关的 HTML 解析库(比如 lxml)对 HTML 文档进行解

POJ 1018 Communication System(枚举)

题目: http://poj.org/problem?id=1018 题解: 我们可以枚举每一种B可能的值,然后寻找每一行里大于等于B里最小的P。 代码: #include<cstdio>#include<stdlib.h>struct in{double B,P;}a[101][101];double b[10001];int t[101];int cmp(cons

C++20中支持的非类型模板参数

C++20中支持将类类型作为非类型模板参数:作为模板参数传入的对象具有const T类型,其中T是对象的类型,并且具有静态存储持续时间(static storage duration)。       在C++20之前,非类型模板参数仅限于:左值引用类型、整数类型、指针类型、指向成员类型的指针、枚举类型、std::nullptr_t。在C++20中,它已扩展并支持:浮点类型、字面量类类

Google 实现量子霸权!3分20秒运算,世界第一超算要跑1万年!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By  大数据技术与架构 场景描述:谷歌宣称“量子霸权”已经实现,他们首次在实验中证明了量子计算机对于传统架构计算机的优越性:在世界第一超算 Summit 需

UI 自动化技能:20个实战技巧!测试工程师必看!

大家周五 好啊!忙碌了一周,又可以懒洋洋躺在沙发上了~~~ 又到了每年的金九银十了,今天聊聊如何提升UI自动化话题... 你是否在求职过程中感受到UI自动化的技能不足? 随着测试行业的发展,UI自动化测试已成为每位测试工程师的必修课。无论你是想提升现有的测试效率,还是在找工作中获得竞争优势,掌握UI自动化技能都能为你带来巨大的帮助。那么,如何快速提升这些技能呢? UI(用户界面)自

【大数据Java基础- Java并发 20】深入分析synchronized的实现原理

记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。 诚然,随着Javs S

xAI巨无霸超级计算机上线:10万张H100 GPU,计划翻倍至20万张

在短短四个多月的时间里,埃隆·马斯克的X公司(前身为Twitter)推出了世界上最强劲的人工智能训练系统。名为Colossus的超级计算机使用了多达10万张NVIDIA H100 GPU进行训练,并计划在未来几个月内再增加5万张H100和H200 GPU。 “本周末,xAI团队启动了我们的Colossus 10万张H100训练集群,”埃隆·马斯克在X平台上写道,“从头到尾只用了122天。Co