PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)

http://www.patest.cn/contests/pat-b-practise/1018

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

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

输入格式:

输入第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
 3 int a2i(char c)
 4 {
 5     if(c==‘B‘) return 0;
 6     else if(c==‘C‘) return 1;
 7     else return 2;
 8 }
 9 char i2a(int i)
10 {
11      if(i==0) return ‘B‘;
12      else if(i==1) return ‘C‘;
13      else return ‘J‘;
14 }
15
16 int main()
17 {
18     int n=0;//双方交锋的次数
19     scanf("%d",&n);
20
21     char jia,yi;
22     int sheng=0,ping=0,fu=0; // 甲
23     int ying1[3]={0},ying2[3]={0}; //B“0 布”    C“1 锤子”   J“2 剪刀”、
24     for(int i=0;i<n;i++)
25     {
26         getchar();
27         scanf("%c",&jia);
28         getchar();
29         scanf("%c",&yi);
30
31         if(a2i(jia)==a2i(yi)) ping++;
32         else if((a2i(jia)-a2i(yi)+3)%3==2) sheng++,ying1[a2i(jia)]++;
33         else fu++,ying2[a2i(yi)]++;
34     }
35     printf("%d %d %d\n",sheng,ping,fu);//输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔
36     printf("%d %d %d\n",fu,ping,sheng);
37
38
39     int k=0;
40     for(int i=1;i<3;i++)
41         if(ying1[i]>ying1[k]) k=i;
42     printf("%c",i2a(k));//第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。
43
44     k=0;
45     for(int i=1;i<3;i++)
46         if(ying2[i]>ying2[k]) k=i;
47     printf(" %c",i2a(k));
48     return 0;
49 }
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n=0;
 5     scanf("%d",&n);
 6
 7     char jia,yi,chu[3]={‘B‘,‘C‘,‘J‘};
 8     int sheng=0,ping=0,fu=0; // 甲
 9     int ying1[3]={0,0,0},ying2[3]={0,0,0}; //B“0 布” C“1 锤子”、J“2 剪刀”、
10     for(int i=0;i<n;i++)
11     {
12         getchar();
13         scanf("%c",&jia);
14         getchar();
15         scanf("%c",&yi);
16
17         if(jia==‘J‘ && yi==‘B‘)
18         {
19              sheng++;
20              ying1[2]++;
21         }
22         else if(jia==‘B‘ && yi==‘C‘)
23         {
24              sheng++;
25              ying1[0]++;
26         }
27         else if(jia==‘C‘ && yi==‘J‘)
28         {
29              sheng++;
30              ying1[1]++;
31         }
32         else if(jia==‘B‘ && yi==‘J‘)
33         {
34              fu++;
35              ying2[2]++;
36         }
37         else if(jia==‘C‘ && yi==‘B‘)
38         {
39              fu++;
40              ying2[0]++;
41         }
42         else if(jia==‘J‘ && yi==‘C‘)
43         {
44              fu++;
45              ying2[1]++;
46         }
47         else
48             ping++;
49     }
50
51     printf("%d %d %d\n",sheng,ping,fu);
52     printf("%d %d %d\n",fu,ping,sheng);
53
54
55     int max=0,k=0;
56     for(int i=0;i<3;i++)
57         if(ying1[i]>max)
58         {
59           max=ying1[i];
60           k=i;
61         }
62     printf("%c",chu[k]);
63
64     max=0;
65     k=0;
66     for(int i=0;i<3;i++)
67         if(ying2[i]>max)
68         {
69           max=ying2[i];
70           k=i;
71         }
72     printf(" %c",chu[k]);
73     return 0;
74 }
时间: 2024-11-16 02:53:36

PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)的相关文章

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

1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N(<=105),即双方交锋的次数.随后N行,每行给出一次交锋的信息,即甲.乙双方同时给出的的手势.C代表“锤子”.J代表“剪刀”.B代

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

1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N(<=105),即双方交锋的次数.随后N行,每行给出一次交锋的信息,即甲.乙双方同时给出的的手势.C代表"锤

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

1018 锤子剪刀布 (20)(20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N(<=10^5^),即双方交锋的次数.随后N行,每行给出一次交锋的信息,即甲.乙双方同时给出的的手势.C代表“锤子”.J代表“剪刀”.B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格. 输出格式: 输出第1.2行分别给出甲.乙的胜.平.负次数

PTA乙级 (1018 锤子剪刀布 (20分))

1018 锤子剪刀布 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <algorithm> using names

1018. 锤子剪刀布 (20) (数学啊 ZJU_PAT)

题目链接:http://www.patest.cn/contests/pat-b-practise/1018 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N(<=105),即双方交锋的次数.随后N行,每行给出一次交锋的信息,即甲.乙双方同时给出的的手势.C代表"锤子".J代表"剪刀".B代表

1018. 锤子剪刀布 (20)

时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N(<=105),即双方交锋的次数.随后N行,每行给出一次交锋的信息,即甲.乙双方同时给出的的手势.C代表"锤子".J代表"

PAT:1018. 锤子剪刀布 (20) AC

#include<stdio.h> #include<stdlib.h> int main() { int n,maxA,maxB; maxA=maxB=-1; int A[3]={0},B[3]={0}; //0,1,2位置分别存胜利,平局,失败..填入次数 int HARSH1[3]={0},HARSH2[3]={0}; //0:布,1锤子,2剪刀: scanf("%d",&n); for(int t=0 ; t<n ; ++t) { getc

PAT (Basic Level) Practise:1017. A除以B (20)

[题目链接] 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格式: 在1行中依次输出Q和R,中间以1空格分隔. 输入样例: 123456789050987654321 7 输出样例: 17636684150141093474 3 提交代码: 1 #include <stdio.h> 2 #include <string.h> 3 4

1018 锤子剪刀布 (20分)

#include <iostream> using namespace std; int main() { int N; cin>>N; int w1=0,w2=0,w3=0; int ac=0,aj=0,ab=0; int bc=0,bj=0,bb=0; int ra,rb; char a,b; for(int i=0;i<N;i++) { cin>>a>>b; if((a=='C'&&b=='J')|| (a=='J'&&a