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. 算法开始。
  2. 初始化整型变量总数、整型变量临时变量为零、字符甲、字符乙、整形变量甲胜利次数为零、甲剪刀胜利次数为零、甲锤子胜利次数为零、甲布胜利次数为零、甲平局次数为零、乙胜利次数为零、乙剪刀胜利次数为零、乙锤子胜利次数为零、乙布胜利次数为零。
  3. 读取剪刀锤子布次数,存储于总数。
  4. 如果临时变量大于等于总数,则跳到第七步。
  5. 读取交锋信息,存储于字符甲和字符乙。
  6. 判断字符甲和字符乙:如果字符甲等于字符乙,则甲平局次数加一;如果字符甲是剪刀,字符乙是布或者字符甲是锤子,字符乙是剪刀或者字符甲是布,字符乙是锤子,那么甲胜利次数加一,甲剪刀或锤子或布胜利次数加一;否则乙胜利次数加一,乙剪刀或锤子或布胜利次数加一。回到第四句。
  7. 输出甲的胜利次数、平局次数、输的次数,乙的胜利次数、平局次数、输的次数。甲什么手势胜利次数最多就输出什么手势,如果次数最多手势不唯一就输出字母序小的手势。对乙也一样。(甲胜利次数等于乙输的次数。甲平局次数等于乙平局次数。甲失败次数等于乙胜利次数。)
  8. 算法结束。
注意:由于我们需要读取缓存区的字符,所以需要清空缓存区,以读取正确的字符。不推荐使用fflush(stdin)、setbuf(stdin. NULL),这两个函数在Xcode环境下达不到我们想要的结果。

下列代码可在PAT和Xcode 上正确工作
#include 
char most_gesture(int j, int c, int b);
int main(int argc, const char * argv[]) {
    int n, i, jia_sheng=0, jia_ping=0, jia_j=0, jia_c=0, jia_b=0, yi_sheng=0, yi_j=0, yi_c=0, yi_b=0;
    char jia, yi;
    char jia_zui, yi_zui;
    scanf("%d", &n);
    for(i=0; ic){
        if(j>b){
            return 'J';
        }
        else{
            return 'B';
        }
    }
    else if(j==c){
        if(j>b){
            return 'C';
        }
        else{
            return 'B';
        }
    }
    else{
        if(c<=b){
            return 'B';
        }
        else{
            return 'C';
        }
    }

}


你可能感兴趣的:(PAT)