【UP】锤子剪刀布(优化 AC)
记录 【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)相关推荐
- PAT (Basic Level) Practice (中文)1018 锤子剪刀布 python (无超时)
出处: https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 1018 锤子剪刀布 (20 分) ...
- 牛客网_PAT乙级1008_锤子剪刀布 (20)
题目 题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N( ...
- C语言满分代码:1018 锤子剪刀布 (20分)(解题报告)
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记 ...
- pat 乙级 1018 锤子剪刀布(C++)
题目 两人玩锤子剪刀布,现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 N(≤105 ),即双方交锋的次数.随后 N 行 ...
- 锤子剪刀布pat-1018
题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...
- HNU软件能力实训2-20. 锤子剪刀布
写在前面 你好!欢迎来到我的博客,希望我的思路能够帮到你! 问题描述 大家应该都会玩"锤子剪刀布"的游戏. 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么 ...
- PAT乙级 1018 锤子剪刀布 (20 分)
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- 1018 锤子剪刀布 (20 分)-测试点1,测试点2,测试点4
1018 锤子剪刀布 (20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什 ...
- Basic Level 1018. 锤子剪刀布 (20)
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势, 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N ...
最新文章
- 通过抓包获取服务器的IP地址
- C语言指针高级部分:void指针和数据指针
- Selenium+PhantomJS使用时报错原因及解决方案
- 强化学习5——价值函数近似(VFA)
- Linux字符设备与块设备的区别与比较
- 合并excel文件 C语言,再见Ctrl + C!合并100个Excel表格,只需30秒!
- mysql 利用触发器(Trigger)让代码更简单
- 对于GetMemory()函数
- 免责协议怎么写_离婚后房产过户协议怎么写?需要公证吗?
- 长沙学院计算机系课程表,长沙交通学院研究生200—200学年度第学期课程表.doc...
- idea 导入template_如何将静态导入添加到IntelliJ IDEA实时模板
- 分布式Redis深度历险-复制
- NLP中GLUE数据集下载
- Socket编程---聊天室终极版-私聊群聊
- 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
- 计算机桌面图标乱了,如何解决电脑桌面图标乱跑的问题
- java myqq ui_GitHub - 744184755/myqq: Java版SWing“高”仿QQ即时通聊天系统
- 8个免费图片素材网,赶紧收藏起来
- 交换机和集线器的区别是什么?
- OpenERP/Odoo的架构