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 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。