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

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 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 锤子剪刀布的更多相关文章
- PAT (Basic Level) Practise:1018. 锤子剪刀布
[题目链接] 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行 ...
- PAT乙级 1018. 锤子剪刀布 (20)
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- PAT-乙级-1018. 锤子剪刀布 (20)
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- PAT_1018 锤子剪刀布
问题描述 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出 ...
- B1018. 锤子剪刀布
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N( ...
- PAT 1018 锤子剪刀布
https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 大家应该都会玩“锤子剪刀布”的游戏:两人同时 ...
- 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)
锤子剪刀布 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 大家应该都会玩“锤子剪刀布”的游戏:现给出 ...
- PAT 乙级 1018 锤子剪刀布 (20) C++版
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- PAT 1018 锤子剪刀布(20)
1018 锤子剪刀布 (20)(20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方 ...
随机推荐
- 使用switch编写一个购物管理系统
在编写过程中,可能没有做到语句的精简,这个是需要解决的事. package nzcc4; import java.util.Scanner; public class Shopmain { publi ...
- CH8 课后习题
8.1和8.2 #include <iostream> using namespace std; istream& f(istream& in) { int v; in & ...
- DDD-领域驱动设计之领域模型
DDD领域驱动设计基本理论知识总结 Posted on 2011-10-10 01:01 netfocus 阅读(120434) 评论(82) 编辑 收藏 领域驱动设计之领域模型 加一个导航,关于如何 ...
- 如何使用Nexus搭建Maven私服
如何使用Nexus搭建Maven私服 听语音 | 浏览:47 | 更新:2016-09-29 10:22 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! ...
- 全程2分钟!教你如何免费下载Windows 10
全程2分钟!教你如何免费下载Windows 10 2014-10-02 08:40:59 来源:pconline 原创 作者:唐山居人 责任编辑:caoweiye (评论314条) 终于在 ...
- NoSQL技术
NoSQL技术使用场景: 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢 ...
- 深度解析标点符号在Report写作中的应用
准确的标点符号和大写字母可以帮助Tutor准确理解report的意思.标点符号的某些方面,例如使用逗号,可以是一种个人风格,在引号中正确的标点符号是至关重要的.在前面的一些文章当中我们也给大家说了re ...
- [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”[转]
测试中发现使用小鹤双拼,如果不是使用shift切换中英文,效果不理想,留下此文章做个标记 https://www.autoahk.com/archives/8755 输入法状态提示,中文状态提示&qu ...
- SciPy 基础功能
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- 【pwnable.kr】 [simple login]
Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...