1018. 锤子剪刀布

来源:互联网 发布:东莞市住宅成交数据 编辑:程序博客网 时间:2024/04/30 09:19

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出格式:

输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。

输入样例:
10C JJ BC BB BB CC CC BJ BB CJ J
输出样例:
5 3 22 3 5B B

算法:

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

下列代码可在PAT和Xcode 上正确工作
#include <stdio.h>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; i<n; i++){        getchar();        scanf("%c %c", &jia, &yi);        if(jia==yi){            jia_ping++;        }        else if(((jia=='C')&&(yi=='J'))||((jia=='J')&&(yi=='B'))||((jia=='B')&&(yi=='C'))){            jia_sheng++;            switch(jia){                case 'C': jia_c++; break;                case 'J': jia_j++; break;                case 'B': jia_b++; break;                default: break;            }        }        else{            yi_sheng++;            switch(yi){                case 'C': yi_c++; break;                case 'J': yi_j++; break;                case 'B': yi_b++; break;                default: break;            }        }    }    jia_zui=most_gesture(jia_j, jia_c, jia_b);    yi_zui=most_gesture(yi_j, yi_c, yi_b);     printf("%d %d %d\n%d %d %d\n%c %c", jia_sheng, jia_ping, yi_sheng                                      , yi_sheng, jia_ping, jia_sheng                                      , jia_zui, yi_zui);    return 0;}char most_gesture(int j, int c, int b){    if(j>c){        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';        }    }}


0 0
原创粉丝点击