2019-02-26-PAT乙级-1018-锤子剪刀布
原文链接:PAT乙级-1018-锤子剪刀布
github代码地址:HibisciDai/OJ-PAT-ACM
2019-02-26-PAT乙级-1018-锤子剪刀布
编程描述
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
辅助描述
1 2 3 4 5
| 作者: CHEN, Yue 单位: 浙江大学 时间限制: 200 ms 内存限制: 64 MB 代码长度限制: 16 KB
|
输入格式
输入第 1 行给出正整数 N(≤ $10^{5}$),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C
代表“锤子”、J
代表“剪刀”、B
代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。
输出格式
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。
输入样例
1 2 3 4 5 6 7 8 9 10 11
| 10 C J J B C B B B B C C C C B J B B C J J
|
输出样例
算法实现
JAVA(openjdk)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| import java.util.Scanner; public class Main { public static Scanner sc = new Scanner(System.in);
public static void main(String[] args) { int N = sc.nextInt(); int count1 = 0; int count2 = 0; int count3 = 0; int c1 = 0; int j1 = 0; int b1 = 0; int c2 = 0; int j2 = 0; int b2 = 0;
for (int i = 0; i < N; i++) { char input1 = sc.next().charAt(0); char input2 = sc.next().charAt(0);
if (input1 == 'C' && input2 == 'J') { count1++; c1++; } else if (input1 == 'C' && input2 == 'B') { count2++; b2++; } else if (input1 == 'J' && input2 == 'C') { count2++; c2++; } else if (input1 == 'J' && input2 == 'B') { count1++; j1++; } else if (input1 == 'B' && input2 == 'C') { count1++; b1++; } else if (input1 == 'B' && input2 == 'J') { count2++; j2++; } else count3++; }
sc.close();
System.out.println(count1 + " " + count2 + " " + count3); System.out.println(count3 + " " + count2 + " " + count1);
if (j1 > c1 && j1 > b1) System.out.print("J "); if (b1 >= c1 && b1 >= j1) System.out.print("B "); if (c1 > b1 && c1 >= j1) System.out.print("C "); if (j2 > c2 && j2 > b2) System.out.print("J"); if (b2 >= c2 && b2 >= j2) System.out.print("B"); if (c2 > b2 && c2 >= j2) System.out.print("C"); } }
|
运行结果
1 2 3 4 5 6 7 8 9
| 状态 分数 题目 编译器 耗时 用户 部分正确 4 1018 Java (openjdk) 116 ms HibisciDai 测试点 结果 耗时 内存 0 答案错误 107 ms 17036 KB 1 答案正确 116 ms 17888 KB 2 答案错误 111 ms 17168 KB 3 答案错误 111 ms 17184 KB 4 答案正确 111 ms 18108 KB 5 运行超时 0 ms 0 KB
|
c++(g++)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<cstdio> int main(){ int n,count1,count2,count3,c1,j1,b1,c2,j2,b2,i; count1=count2=count3=c1=j1=b1=c2=j2=b2=0; scanf("%d",&n); char a[n][2]; for(i=0;i<n;i++){ getchar(); scanf("%c %c",&a[i][0],&a[i][1]); if(a[i][0]=='C'&&a[i][1]=='J'){ count1++; c1++; } else if(a[i][0]=='C'&&a[i][1]=='B'){ count2++; b2++; } else if(a[i][0]=='J'&&a[i][1]=='C'){ count2++; c2++; } else if(a[i][0]=='J'&&a[i][1]=='B'){ count1++; j1++; } else if(a[i][0]=='B'&&a[i][1]=='C'){ count1++; b1++; } else if(a[i][0]=='B'&&a[i][1]=='J'){ count2++; j2++; } else count3++; } printf("%d %d %d\n",count1,count3,count2); printf("%d %d %d\n",count2,count3,count1); if(j1>c1&&j1>b1) printf("J "); if(b1>=c1&&b1>=j1) printf("B "); if(c1>b1&&c1>=j1) printf("C "); if(j2>c2&&j2>b2) printf("J"); if(b2>=c2&&b2>=j2) printf("B"); if(c2>b2&&c2>=j2) printf("C"); return 0; }
|
运行结果
1 2 3 4 5 6 7 8 9
| 状态 分数 题目 编译器 耗时 用户 答案正确 20 1018 C++ (g++) 17 ms HibisciDai 测试点 结果 耗时 内存 0 答案正确 2 ms 256 KB 1 答案正确 2 ms 304 KB 2 答案正确 2 ms 256 KB 3 答案正确 2 ms 256 KB 4 答案正确 1 ms 256 KB 5 答案正确 17 ms 384 KB
|