PAT B1018 锤子剪刀布(C++) 发表于 2018-11-12 | 分类于 PAT题解 | | 字数统计: 284 字 | 阅读时长 ≈ 1 分钟 PAT甲级目录 | PAT乙级目录 题目描述 B1018 锤子剪刀布 也许陌生的知识点 map<char, int> m 创建一个 map 变量,用于将手势映射为数字,方便处理。 if((m[a] - m[b] + 3) % 3 == 2){ } 类似于剪刀石头布的循环制约游戏策略都可以这种模式进行判断,可自行画图理解。 代码示例:123456789101112131415161718192021222324252627282930#include <cstdio>#include <map>using namespace std;char getans(int t[]){ // 返回赢的次数最多的手势 if(t[0] >= t[1]){ if(t[0] >= t[2]) return 'B'; else return 'J'; }else return 'C';}int main(){ int A_win = 0, A_lose = 0, Tie = 0, N, cnt_a[3] = {0}, cnt_b[3] ={0}; char a, b; map<char, int> m; //记录手势与数字的映射 m['B'] = 0; m['C'] = 1; m['J'] = 2; scanf("%d\n", &N); for(int i = 0; i < N; i++){ scanf("%c %c\n", &a, &b); if(a == b) Tie ++; else if((m[a] - m[b] + 3) % 3 == 2){//满足该式时为 A 赢 A_win++; cnt_a[m[a]]++; }else{ A_lose++; cnt_b[m[b]]++; } } printf("%d %d %d\n%d %d %d\n", A_win, Tie, A_lose, A_lose, Tie, A_win); printf("%c %c\n", getans(cnt_a), getans(cnt_b)); return 0;} 本文作者: Philo 本文链接: http://lulalap.com/2018/11/12/PAT-B1018-cpp/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!