记录 【PAT乙级】题解-1018 锤子剪刀布 冗余逻辑精简过程。

AC - 最高奥义

#include <iostream>
using namespace std;int main() {int n;cin >> n;// 胜平负记录一个甲的,乙的直接逆序输出即可int s = 0, p = 0, f = 0;int ac = 0, aj = 0, ab = 0;int bc = 0, bj = 0, bb = 0;while(n --) {  C J Bchar a, b;cin >> a >> b;if(a == 'C') {if(b == 'C') {p ++;} else if(b == 'J') {s ++;ac ++;} else if(b == 'B') {f ++;bb ++;}} else if(a == 'J') {if(b == 'C') {f ++;bc ++;} else if(b == 'J') {p ++;} else if(b == 'B') {s ++;aj ++;}} else if(a == 'B') {if(b == 'C') {s ++;ab ++;} else if(b == 'J') {f ++;bj ++;} else if(b == 'B') {p ++;}}}cout << s << " " << p << " " << f << endl;cout << f << " " << p << " " << s << endl;// ab  ac  ajif(ab == ac && ab == aj) cout << "B ";else if(ac == aj && ac > ab) cout << "C ";else if(ab == aj && ac > ab) cout << "C ";else if(ab == aj && ab > ac) cout << "B ";else {if(ab > ac && ab > aj) cout << "B ";if(ac > ab && ac > aj) cout << "C "; if(aj > ab && aj > ac) cout << "J ";}// bb  bc  bjif(bb == bc && bb == bj) cout << "B" << endl;else if(bc == bj && bc > bb) cout << "C" << endl;else if(bb == bj && bc > bb) cout << "C" << endl;else if(bb == bj && bb > bc) cout << "B" << endl;else {if(bb > bc && bb > bj) cout << "B" << endl;if(bc > bb && bc > bj) cout << "C" << endl;if(bj > bb && bj > bc) cout << "J" << endl;}return 0;
}

冗余逻辑 1

确定甲、乙获胜次数最多的手势,如果解不唯一,则输出按字母序最小的解(B>C>JB>C>JB>C>J)。

#include <iostream>
using namespace std;int main() {int n;cin >> n;// 胜平负记录一个甲的,乙的直接逆序输出即可int s = 0, p = 0, f = 0;int ac = 0, aj = 0, ab = 0;int bc = 0, bj = 0, bb = 0;while(n --) {char a, b;cin >> a >> b;if(a == 'C') {if(b == 'C') {p ++;} else if(b == 'J') {s ++;ac ++;} else if(b == 'B') {f ++;bb ++;}} else if(a == 'J') {if(b == 'C') {f ++;bc ++;} else if(b == 'J') {p ++;} else if(b == 'B') {s ++;aj ++;}} else if(a == 'B') {if(b == 'C') {s ++;ab ++;} else if(b == 'J') {f ++;bj ++;} else if(b == 'B') {p ++;}}}cout << s << " " << p << " " << f << endl;cout << f << " " << p << " " << s << endl;// ab  ac  ajif(ab >= aj && ab >= ac) cout << "B ";else if(ac >= aj && aj > ab) cout << "C ";else if(ac > ab && ab >= aj) cout << "C ";else if(aj > ab && aj > ac) cout << "J ";// bb  bc  bjif(bb >= bj && bb >= bc) cout << "B" << endl;else if(bc >= bj && bj > bb) cout << "C" << endl;else if(bc > bb && bb >= bj) cout << "C" << endl;else if(bj > bb && bj > bc) cout << "J" << endl;return 0;
}

冗余逻辑 2

确定甲、乙获胜次数最多的手势。如果解不唯一,则输出按字母序最小的解(B>C>JB>C>JB>C>J)。

合并优化代码逻辑:

  • 输出 BBB,因字母序中 BBB 最小,均可取等, 满足 B≥CandB≥JB≥C and B≥JB≥CandB≥J 即可,C、JC、JC、J 的顺序无关;
  • 输出 CCC,因字母序中 BBB 最小,CCC 不可取等于 BBB,满足 C>BandC≥JC>B and C≥JC>BandC≥J)即可,B、JB、JB、J 的顺序无关;
  • 输出 JJJ,因字母序中 JJJ 最大,均不可取等,满足 J>BandJ>CJ>B and J>CJ>BandJ>C)即可,B、CB、CB、C 的顺序无关;
#include <iostream>
using namespace std;int main() {int n;cin >> n;// 胜平负记录一个甲的,乙的直接逆序输出即可int s = 0, p = 0, f = 0;int ac = 0, aj = 0, ab = 0;int bc = 0, bj = 0, bb = 0;while(n --) {char a, b;cin >> a >> b;if(a == 'C') {if(b == 'C') {p ++;} else if(b == 'J') {s ++;ac ++;} else if(b == 'B') {f ++;bb ++;}} else if(a == 'J') {if(b == 'C') {f ++;bc ++;} else if(b == 'J') {p ++;} else if(b == 'B') {s ++;aj ++;}} else if(a == 'B') {if(b == 'C') {s ++;ab ++;} else if(b == 'J') {f ++;bj ++;} else if(b == 'B') {p ++;}}}cout << s << " " << p << " " << f << endl;cout << f << " " << p << " " << s << endl;// ab  ac  ajif(ab >= aj && ab >= ac) cout << "B ";else if(ac >= aj && ac > ab) cout << "C ";else if(aj > ab && aj > ac) cout << "J ";// bb  bc  bjif(bb >= bj && bb >= bc) cout << "B" << endl;else if(bc >= bj && bc > bb) cout << "C" << endl;else if(bj > bb && bj > bc) cout << "J" << endl;return 0;
}

优化 AC - 高追求

合并优化 s、p、f 代码逻辑,代码缩减到 545454 行。

#include <iostream>
using namespace std;int main() {int n;cin >> n;// 胜平负记录一个甲的,乙的直接逆序输出即可int s = 0, p = 0, f = 0;int ac = 0, aj = 0, ab = 0;int bc = 0, bj = 0, bb = 0;while(n --) {char a, b;cin >> a >> b;if(a == b) {p ++;} else if(a == 'C' && b == 'J') {s ++;ac ++;} else if(a == 'J' && b == 'B') {s ++;aj ++;} else if(a == 'B' && b == 'C') {s ++;ab ++;} else if(b == 'C' && a == 'J') {f ++;bc ++;} else if(b == 'J' && a == 'B') {f ++;bj ++;} else if(b == 'B' && a == 'C') {f ++;bb ++;}}cout << s << " " << p << " " << f << endl;cout << f << " " << p << " " << s << endl;// ab  ac  ajif(ab >= aj && ab >= ac) cout << "B ";else if(ac >= aj && ac > ab) cout << "C ";else if(aj > ab && aj > ac) cout << "J ";// bb  bc  bjif(bb >= bj && bb >= bc) cout << "B" << endl;else if(bc >= bj && bc > bb) cout << "C" << endl;else if(bj > bb && bj > bc) cout << "J" << endl;return 0;
}

【UP】锤子剪刀布(优化 AC)相关推荐

  1. PAT (Basic Level) Practice (中文)1018 锤子剪刀布 python (无超时)

    出处: https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 1018 锤子剪刀布 (20 分) ...

  2. 牛客网_PAT乙级1008_锤子剪刀布 (20)

    题目 题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N( ...

  3. C语言满分代码:1018 锤子剪刀布 (20分)(解题报告)

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记 ...

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

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

  5. 锤子剪刀布pat-1018

    题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...

  6. HNU软件能力实训2-20. 锤子剪刀布

    写在前面 你好!欢迎来到我的博客,希望我的思路能够帮到你! 问题描述 大家应该都会玩"锤子剪刀布"的游戏. 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么 ...

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

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

  8. 1018 锤子剪刀布 (20 分)-测试点1,测试点2,测试点4

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

  9. Basic Level 1018. 锤子剪刀布 (20)

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

最新文章

  1. 通过抓包获取服务器的IP地址
  2. C语言指针高级部分:void指针和数据指针
  3. Selenium+PhantomJS使用时报错原因及解决方案
  4. 强化学习5——价值函数近似(VFA)
  5. Linux字符设备与块设备的区别与比较
  6. 合并excel文件 C语言,再见Ctrl + C!合并100个Excel表格,只需30秒!
  7. mysql 利用触发器(Trigger)让代码更简单
  8. 对于GetMemory()函数
  9. 免责协议怎么写_离婚后房产过户协议怎么写?需要公证吗?
  10. 长沙学院计算机系课程表,长沙交通学院研究生200—200学年度第学期课程表.doc...
  11. idea 导入template_如何将静态导入添加到IntelliJ IDEA实时模板
  12. 分布式Redis深度历险-复制
  13. NLP中GLUE数据集下载
  14. Socket编程---聊天室终极版-私聊群聊
  15. 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
  16. 计算机桌面图标乱了,如何解决电脑桌面图标乱跑的问题
  17. java myqq ui_GitHub - 744184755/myqq: Java版SWing“高”仿QQ即时通聊天系统
  18. 8个免费图片素材网,赶紧收藏起来
  19. 交换机和集线器的区别是什么?
  20. OpenERP/Odoo的架构

热门文章

  1. 最美公式:世上最伟大的十个公式
  2. sinatra源码解读
  3. Piktochart(制作信息图表)
  4. snprintf总结
  5. 在html中做产品介绍页面,美发企业制作网页时如何添加产品介绍
  6. 红芯事件:当创新开始变的水土不服
  7. video 标签设置样式
  8. SQL必知必会(第五版)学习笔记
  9. FFplay文档解读-25-音频源,音频接收器
  10. 戴尔windows10桌面计算机,戴尔笔记本自带的win10系统怎么进行优化?