PAT 乙级 1018 锤子剪刀布

输入样例:
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
原题链接
思路:
甲乙各用一个长度为6的数组来存储胜平负的次数以及出布赢、出锤赢、出剪赢的次数。需要注意的是本题在输入时会有换行符,而scanf()函数可以读入换行符,不会自动忽略每行的换行,所以要在scanf()函数后紧跟一个getchar(),否则会出错。
源码:
#include<stdio.h>
int main()
{
int n;
char jia0, yi0;
int jia[6] = { 0 }, yi[6] = { 0 };
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++) {
scanf("%c %c", &jia0, &yi0);
getchar();
if ((jia0 == 'B' && yi0 == 'C')||(jia0 == 'C' && yi0 == 'J')||(jia0=='J'&&yi0=='B')) {
jia[0]++;
yi[2]++;
if (jia0 == 'B')jia[3]++;
else if (jia0 == 'C')jia[4]++;
else if (jia0 == 'J')jia[5]++;
}
else if ((jia0 == 'C' && yi0 == 'B') || (jia0 == 'J' && yi0 == 'C') || (jia0 == 'B' && yi0 == 'J')) {
jia[2]++;
yi[0]++;
if (yi0 == 'B')yi[3]++;
else if (yi0 == 'C')yi[4]++;
else if (yi0 == 'J')yi[5]++;
}
else {
jia[1]++;
yi[1]++;
}
}
int jia2 = 3;
for (int i = 4; i < 6; i++) {
if (jia[i] > jia[3]) { jia2 = i; jia[3] = jia[i]; }
}
int yi2 = 3;
for (int i = 4; i < 6; i++) {
if (yi[i] > yi[3]) { yi2 = i; yi[3] = yi[i]; }
}
printf("%d %d %d\n", jia[0], jia[1], jia[2]);
printf("%d %d %d\n", yi[0], yi[1], yi[2]);
if (jia2 == 3)printf("B ");
else if (jia2 == 4)printf("C ");
else printf("J ");
if (yi2 == 3)printf("B");
else if (yi2 == 4)printf("C");
else printf("J");
return 0;
}
PS:
代码有点繁琐,后面输出两个字符的代码可以建一个数组,代码会少很多,我懒得改了~~

1219

被折叠的 条评论
为什么被折叠?



