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 }