读题:
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 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
思路:想不出简化流程方法,写了很多if。
代码:(啥也不是)
#include<stdio.h>
int main()
{
int i, n, win, ping = 0, defeat, counta[10] = { 0 }, countb[10] = { 0 };
char str1, str2;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
getchar();
scanf("%c %c", &str1, &str2);
if (str1 == str2) ping++;
else if (str1 == 'C' && str2 == 'J') counta[1]++;
else if (str1 == 'C' && str2 == 'B') countb[3]++;
else if (str1 == 'J' && str2 == 'C') countb[1]++;
else if (str1 == 'J' && str2 == 'B') counta[2]++;
else if (str1 == 'B' && str2 == 'C') counta[3]++;
else if (str1 == 'B' && str2 == 'J') countb[2]++;
}
win = counta[1] + counta[2] + counta[3];
defeat = countb[1] + countb[2] + countb[3];
printf("%d %d %d\n", win, ping, defeat);
printf("%d %d %d\n", defeat, ping, win);
if (counta[3] >= counta[1] && counta[3] >= counta[2]) printf("B");
else if (counta[1] >= counta[2] && counta[1] >= counta[3]) printf("C");
else if (counta[2] >= counta[1] && counta[2] >= counta[3]) printf("J");
printf(" ");
if (countb[3] >= countb[1] && countb[3] >= countb[2]) printf("B");
else if (countb[1] >= countb[2] && countb[1] >= countb[3]) printf("C");
else if (countb[2] >= countb[1] && countb[2] >= countb[3]) printf("J");
}
总结:。。。没啥意思