不难,有点繁琐。
思路是:1、分别考虑甲出锤、石头、布的情况下,乙出不同的手势对应的结果。写一段代码,其他两段复制后稍作修改即可。
2、jia[max]数组存储的分别是赢、平、输的次数,乙的反过来输出即可。
3、a[max]数组存储的分别是出C、J、B赢的次数,b[max]数组存储的分别是出C、J、B赢的次数。
4、先考察如果出布赢的次数大于等于出其他的次数,那么打印布,否则考察锤、剪刀。
#include <stdio.h>
int main()
{
int n, i;
int jia[5]={0}, a[5]={0}, b[5]={0};
char n1, n2, temp1, temp2;
scanf("%d", &n);
for (i=0; i<n; i++) {
getchar();
scanf("%c %c", &n1, &n2);
//printf("%c %c\n", n1, n2); //测试代码
if (n1=='C') { //甲出锤
if (n2=='C') {
jia[2]++; //平局
}else if (n2=='J') {
jia[1]++; //甲赢,即乙输
a[1]++; //甲出锤赢
}else if (n2=='B') {
jia[3]++; //甲输,即乙赢
b[3]++; //乙出布赢
} //a和b的1、2、3分别表示C、J、B
}else if (n1=='J') { //甲出剪
if (n2=='C') {
jia[3]++;
b[1]++;
}else if (n2=='J') {
jia[2]++;
}else if (n2=='B') {
jia[1]++;
a[2]++;
}
}else if (n1=='B') { //甲出布
if (n2=='C') {
jia[1]++;
a[3]++;
//printf("%d %d\n", jia[1], a[3]); //测试代码
}else if (n2=='J') {
jia[3]++;
b[2]++;
}else if (n2=='B') {
jia[2]++;
}
}
} //统计输赢次数以及出什么赢的
printf("%d %d %d\n", jia[1], jia[2], jia[3]);
printf("%d %d %d\n", jia[3], jia[2], jia[1]);
//printf("%d %d %d\n", a[1], a[2], a[3]); //测试代码
//printf("%d %d %d\n", b[1], b[2], b[3]); //测试代码
if (a[3]>=a[1] && a[3]>=a[2]) temp1='B'; //注意判断的先后顺序应该B C J,即按字母序来
else if (a[1]>=a[2] && a[1]>=a[3]) temp1='C';
else temp1='J'; //存储甲胜算最大的
if (b[3]>=b[1] && b[3]>=b[2]) temp2='B';
else if (b[1]>=b[2] && b[1]>=b[3]) temp2='C';
else temp2='J'; //存储乙胜算最大的
printf("%c %c", temp1, temp2);
}