文章目录

  • 题目内容
    • 输入格式:
    • 输出格式:
    • 输入样例:
    • 输出样例:
  • 一、题解要点
  • 二、具体实现
  • 总结

题目内容

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

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

输入格式:

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

一、题解要点

  • 首先是将手势转化为数字,这是一种很聪明的手法,给程序逻辑编写带来很大的便利,尤其是在判断胜负以及存储胜利手势的时候
  • (j+1)%3 == y 这句代码来判断胜负,其中因为各个手势以一定的规律存储(0胜1,1胜2,2胜0),所以这段代码可以直接判断胜负

二、具体实现

#include<iostream>
#include<string.h>
using namespace std;/*用来将手势转化为数字的函数*/
int change(char c){if(c == 'B') return 0;if(c == 'C') return 1;if(c == 'J') return 2;
}/*用来判断那种手势赢的最多的函数*/
char judge(int s[]){int shoushi=-1,max=-1;for(int i=0;i<3;i++){if(max<s[i]){max = s[i];shoushi =i;}}switch(shoushi){case 0:return 'B'; break;case 1:return 'C'; break;case 2:return 'J'; break;  }
}int main(){int jushu,j,y; //储存局数、甲乙手势转化后的数字 int jia_ju[3]={0},yi_ju[3]={0};  //储存甲乙胜平负的场数 int jia_shou[3]={0},yi_shou[3]={0}; //储存甲乙胜利的手势 char jia,yi;  //用来接收输入的手势 cin>>jushu; //输入局数for(int i=0;i<jushu;i++){cin>>jia>>yi;j = change(jia);y = change(yi);if(j == y){ //平局的话就把甲乙的平局数加一 jia_ju[1]++;yi_ju[1]++;}else if((j+1)%3 == y){ //甲胜乙jia_ju[0]++; //甲胜局加一 yi_ju[2]++; //乙负局加一 jia_shou[j]++; //甲以何种手势胜的加一 }else{  //乙胜甲 jia_ju[2]++;yi_ju[0]++;yi_shou[y]++;}}/*输出甲乙的胜平负*/cout<<jia_ju[0]<<" "<<jia_ju[1]<<" "<<jia_ju[2]<<endl; cout<<yi_ju[0]<<" "<<yi_ju[1]<<" "<<yi_ju[2]<<endl;/*输出甲乙最多的胜的手势*/cout<<judge(jia_shou)<<" "<<judge(yi_shou)<<endl;return 0;
}

总结

重点在于手势转数字的操作以及之后的判胜操作,细节繁多,写的时候一定要注意。

PTA乙级-1018 锤子剪刀布 c++相关推荐

  1. C++学习之路 | PTA乙级—— 1018 锤子剪刀布 (20分)(精简)

    1018 锤子剪刀布 (20分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: FigCJB.jpg 现给出两人的交锋记录,请统计双方的胜.平.负次数, ...

  2. PAT乙级 1018 锤子剪刀布 (JAVA)

    1018 锤子剪刀布 (20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什 ...

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

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

  4. [PAT乙级]1018 锤子剪刀布

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  5. PAT乙级(1018 锤子剪刀布)

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  6. PAT乙级 1018 锤子剪刀布 (20 分)

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  7. PAT 乙级 1018 锤子剪刀布 (20分)

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  8. PAT乙级 1018 锤子剪刀布

    一.题目描述 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输 ...

  9. PAT——乙级 1018锤子剪刀布

    此题如果要用if else做的话,很繁琐,而且很容易出错 tips: 由于scanf使用%c时会将换行符与空格等输入 因此需要在合适的地方加上getchar()吸收空格 另外输入一定要按样例的格式,有 ...

最新文章

  1. Matlab计算速度优化(矩阵,bsxfun,repmat)
  2. asp网页设计流量统计代码
  3. centos中的配置文件
  4. (转)剖析Delphi中的构造和析构
  5. 惊!MySQL官网巨变,下载被取消
  6. java随机产生十个坐标_java中随机坐标
  7. 是时候详细探究webview了
  8. [原创]如何从数据库层面检测两表内容的一致性
  9. [论文阅读] Learning Without Forgetting
  10. 用友仓库档案boot直接访问html,图文解析用友仓库软件怎样设置档案?
  11. Java EE开发四大常用框架(1)
  12. 大型网站应用之海量数据和高并发解决方案总结一二!
  13. java 用户行为记录_大型网站用户行为记录的一个实现
  14. c语言随机抽奖小程序,基于C#实现简单的随机抽奖小程序
  15. java开发手册 - 码出规范 - 要点整理
  16. 透视投影中已知两平面的单应矩阵,能否求出这两平面的夹角?
  17. 随机存储器:SRAM、DRAM、SDRAM的区别
  18. 解决关闭浏览器后再打开,访问网站仍然自动登陆的问题
  19. DUMN : Deep User Match Network for Click-Through Rate Prediction
  20. C语言基础题-水仙花数

热门文章

  1. 不止是上云,更是上岸
  2. 让编程不再迷茫--java编程入门
  3. 我的笔记(主要是尚品汇前台项目)
  4. mosquitto c语言编程,MQTT通讯协议(mosquitto)发布订阅例子C语言实现
  5. 算法工程师:在算法“黑箱”中保障用户知情权
  6. Unity_四元素Quaternion
  7. 词性标注,句法分析中NN,NP是什么意思
  8. 高性能家用计算机能干嘛,买台服务器当家用电脑是种什么体验?那酸爽用过才会懂...
  9. 从摆地摊到开网店,这对小夫妻一年狂赚45万元
  10. unet图片数据增强_Unet