转跳点:

1018 锤子剪刀布 (20分)
 

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

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

输入格式:

输入第 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
  这道题不算难题,就是注意排序方式,考察了多组输入字符比较,没什么特别大的坑,就是个人感觉三目运算会更简单的解决三个数比大小的问题。注意考虑相等的情况。
我写了两个函数的三个数比较和宏定义的三目运算三位数比较,代码较长。

  非宏定义

  

 1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int compared(int a, int b, int c);
5
6 int main()
7 {
8 int n;
9 char TypeMap[] = {'J', 'C', 'B'};
10 int Awin = 0, Bwin = 0, Nwin = 0;
11 int BJ = 0, BC = 0, BB = 0, AJ = 0, AC = 0, AB = 0;
12 char A, B;
13
14 scanf("%d\n", &n);
15
16 //开始统计各种次数
17 while (n--)
18 {
19 scanf("%c %c", &A, &B);
20
21 //偷懒求了B C J差值
22 //A赢的情况8 ,-7, -1
23 //B赢的情况-8, 7, 1
24 switch (A - B)
25 {
26 case 0: //平局
27 Nwin++;
28 break;
29 case 8: //J - B
30 Awin++;
31 AJ++;
32 break;
33 case -7: //C - J
34 Awin++;
35 AC++;
36 break;
37 case -1: //B - C
38 Awin++;
39 AB++;
40 break;
41 case -8: //B - J, 从这里往下乙赢
42 Bwin++;
43 BJ++;
44 break;
45 case 7: //J - B
46 Bwin++;
47 BC++;
48 break;
49 case 1: //C - B
50 Bwin++;
51 BB++;
52 break;
53 }
54 getchar();
55 }
56
57 int BigA = compared(AJ, AC, AB);
58 int BigB = compared(BJ, BC, BB);
59
60 printf("%d %d %d\n", Awin, Nwin, Bwin);
61 printf("%d %d %d\n", Bwin, Nwin, Awin);
62 printf("%c %c\n", TypeMap[BigA], TypeMap[BigB]);
63 return 0;
64 }
65
66 //三个数比大小
67 int compared(int a, int b, int c)
68 {
69 if (a > b)
70 {
71 if (a > c)
72 {
73 return 0;
74 }
75 else
76 {
77 return 2;
78 }
79 }
80 else
81 {
82 if (b > c)
83 {
84 return 1;
85 }
86 else
87 {
88 return 2;
89 }
90 }
91 }

  三目运算

 1 #include <stdio.h>
2 #include <stdlib.h>
3
4 //三目运算三个数比大小
5 #define cmp(a, b, c) a > b ? (a > c ? 0 : 2) : (b > c ? 1 : 2);
6
7 int main()
8 {
9 int n;
10 char TypeMap[] = {'J', 'C', 'B'};
11 int Awin = 0, Bwin = 0, Nwin = 0;
12 int BJ = 0, BC = 0, BB = 0, AJ = 0, AC = 0, AB = 0;
13 char A, B;
14
15 scanf("%d\n", &n);
16
17 while (n--)
18 {
19 scanf("%c %c", &A, &B);
20
21 switch (A-B)
22 {
23 case 0:Nwin++;break;
24 case 8:Awin++;AJ++;break;
25 case -7:Awin++;AC++;break;
26 case -1:Awin++;AB++;break;
27 case -8:Bwin++;BJ++;break;
28 case 7:Bwin++;BC++;break;
29 case 1:Bwin++;BB++;break;
30 }
31 getchar();//吞回车
32 }
33
34 int BigA = cmp(AJ, AC, AB);
35 int BigB = cmp(BJ, BC, BB);
36
37 printf("%d %d %d\n", Awin, Nwin, Bwin);
38 printf("%d %d %d\n",Bwin, Nwin, Awin);
39 printf("%c %c\n", TypeMap[BigA], TypeMap[BigB]);
40 return 0;
41 }

内联三目

  不用宏也可以,直接写个函数也行,鬼知道,宏会不会被编译器优化

int cmp(char a, char b, char c) {return a > b ? (a > c ? 0 : 2) : (b > c ? 1 : 2);}

   喜欢哪个用哪个吧

  PAT不易,诸君共勉!

P1018 锤子剪刀布的更多相关文章

  1. PAT (Basic Level) Practise:1018. 锤子剪刀布

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

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

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  3. PAT-乙级-1018. 锤子剪刀布 (20)

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  4. PAT_1018 锤子剪刀布

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

  5. B1018. 锤子剪刀布

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

  6. PAT 1018 锤子剪刀布

    https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 大家应该都会玩“锤子剪刀布”的游戏:两人同时 ...

  7. 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)

    锤子剪刀布 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 大家应该都会玩“锤子剪刀布”的游戏:现给出 ...

  8. PAT 乙级 1018 锤子剪刀布 (20) C++版

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  9. PAT 1018 锤子剪刀布(20)

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

随机推荐

  1. MySQL 常用SQL 汇总

    1.查看当前应用连接,连接数突增排查 select user,SUBSTRING_INDEX(host,':',1) as ip , count(*) as count,db from informa ...

  2. Mac安装jdk

    jdk:https://blog.csdn.net/zw235345721/article/details/78702254 mysql:https://www.jianshu.com/p/fd3aa ...

  3. js隐藏button

    $("#plshbtn").attr("style","display:none;");

  4. jdk环境变量、maven环境变量、Mysql环境变量配置

    jdk官网地址:http://www.oracle.com/index.htmlhttp://www.java.sun.com 一.配置 jdk环境变量1.新建JAVA_HOME,在变量值复制JDK安 ...

  5. 整合Spring时Service层为什么不做全局包扫描详解

    合Spring时Service层为什么不做全局包扫描详解 一.Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这两个 ...

  6. docker-compose 修改zabbix images 添加微信报警插件 时间同步 中文乱码 添加grafana美化zabbix

    我们先来看一下我们要修改得  zabbix.yaml           github   https://github.com/bboysoulcn/awesome-dockercompose ve ...

  7. 用 k8s 运行一次性任务【转】

    容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序,完成后容 ...

  8. Excel的查询函数vlookup和index使用

    需求 有一些省市的区县,有600多条数据,只有名称,没有编码.现在要根据名称去3000多条数据里面查询. 如图,拿出一部分数据来演示 vlookup 使用vlookup,由于vlookup只能查询数据 ...

  9. [Codeforces #608 div2]1271A Suits

    Description A new delivery of clothing has arrived today to the clothing store. This delivery consis ...

  10. java核心-多线程(4)-线程类基础知识

    1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系 ...