转跳点:

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. 第2节 storm实时看板案例:12、实时看板综合案例代码完善;13、今日课程总结

    详见代码 将任务提交到集群上面去运行 apache-storm-1.1.1/bin/storm jar cn.itcast.storm.kafkaAndStorm.KafkTopology kafka ...

  2. Windows Server 2008 R2 SP1 中IIS7.5 和 TOMCAT7 整合笔记

    Windows Server 2008 R2 SP1 中IIS7.5 和 TOMCAT7 整合笔记 来源:www.roak.com 整合文件在百度网盘或博客盘 配置了N次,64位操作系统真坑爹~~~下 ...

  3. luogu P2766 最长不下降子序列问题

    第一问可以直接DP来做,联想上一题,线性规划都可以化为网络流?我们可以借助第一问的DP数组,来建立第二问第三问的网络流图,考虑每一种可能,都是dp数组中满足num[i]>=num[j]& ...

  4. Python2 和 Python3 编码问题

    基本存储单元 位(bit, b):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位. 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节. 1B = 8b 各种信息在计算机 ...

  5. PYTHON __main__

    #importby.py if __name__ =='__main__': print '>>>>>>>1' if __name__ =="imp ...

  6. 前端学习(20)~css布局(十三)

    常见的布局属性 (1)display 确定元素的显示类型: block:块级元素. inline:行内元素. inline-block:对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以 ...

  7. SQLSERVER|CDC 日志变更捕获机制

    先说一下什么是cdc ,cdc 变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入.更新和删除活动.SQLServer的操作会写日志,这也是CD ...

  8. CentOS 7安装/卸载Redis,配置service服务管理

    Redis简介 Redis功能简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 相比于传统的关系型数据库,Redis的存储方式是key-va ...

  9. dataGridView与数据源dataTable同步排序

    private void dataGridView1_Sorted(object sender, EventArgs e)         {             string _sortStr ...

  10. SQL计算字符串里的子字符串出现个数

    在某个页面,需要显示每条记录中有几个图片文件.图片文件名列表存储在mysql表里的photo_files字段,文件名之间用一个空格分开.类似'images\rpt201503121.jpg image ...