• SDUSTOJ 1191


    Description
    Tom、Jack和Mary三人在同一个小学上学,又住在同一个小区。所以每天上学、放学的路上,他们都玩一些小游戏。某天,三人玩剪子包袱锤(Scissors-Paper-Rock)。每人随机出一种,然后决定胜出者和失败者。
    现在,请你编程,判断每次游戏的结果。
    Input
    输入为多行。第一行 含有2个数字M和N,其中0 < M < 100,表示总共进行了M次游戏。0 < N <= 10表示有N个人同时进行游戏。
    第二行是N个人的名字,两两之间用空格隔开。
    之后的M行,是M次游戏时每个人出的拳种(Scissors、Paper或Rock),每行含有N个输入,两两之间用空格隔开。
    Output
    输出有M行,每行输出与上述每行输入一一对应。输出分为3种情况:
    1. 如果N个人无法决出胜负,且不是平局,则输出:No winner, no loser.
    2. 如果N个人所出相同,则为平局,输出:Tie.
    3. 如果一部分人胜出,则输出:winner1, winner2,… win loser1, loser2,…
    其中,winner1,winner2与loser1,loser2等是对应人的姓名,输出顺序与输入的第2行中的姓名顺序相同。具体格式见样例。
    Sample Input
    3 3
    Tom Jack Mary
    Rock Rock Rock
    Rock Paper Scissors
    Rock Scissors Scissors
    Sample Output
    Tie.
    No winner, no loser.
    Tom win Jack,Mary.

    思路

    比较简单的题目 , 代码过程中巧妙地运用函数极大地精简了代码量

    AC代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define maxn 15
    
    struct game
    {
        char n[100];  //记录名字
        char q[10];  //拳种
    };
    struct game p[maxn];
    
    int tiejudge( int a, int b, int c )
    {
        if( a != 0 && b == 0 && c == 0 )
            return 1;
        return 0;
    }
    
    void put_results( struct game *p, char win, char fal, int b )
    {
        int times = 0;
        for( int i = 0; i < b; i++ ){
            if( p[i].q[0] == win ){
                if( times )
                    printf(",");
                printf("%s",p[i].n);
                times++;
            }
        }
        printf(" win ");
        times = 0;
        for( int i = 0; i < b; i++ ){
            if( p[i].q[0] == fal ){
                if( times )
                    printf(",");
                printf("%s",p[i].n);
                times++;
            }
        }
        puts(".");
    }
    
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
        for( int i = 0; i < b; i++ )
            scanf("%s",p[i].n);
        while(a--){
            int jd = 0, st = 0, bu = 0;
            for( int i = 0; i < b; i++ ){
                scanf("%s",p[i].q);
                switch( p[i].q[0] ){
                    case 'S' : jd++;    break;
                    case 'R' : st++;    break;
                    case 'P' : bu++;    break;
                }
            }
            if( jd != 0 && st != 0 && bu != 0 )
                puts("No winner, no loser.");
            else if( tiejudge(jd,st,bu) || tiejudge(st,bu,jd) || tiejudge(bu,jd,st) )
                puts("Tie.");
            else
            {
                if( jd == 0 )   put_results( p, 'P', 'R', b );
                else if( st == 0 )   put_results( p, 'S', 'P', b );
                else if( bu == 0 )   put_results( p, 'R', 'S', b );
            }
        }
        return 0;
    }
    
  • 相关阅读:
    转 Python常见数据结构整理
    转 Python爬虫实战二之爬取百度贴吧帖子
    转 Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters
    慕课 python 操作数据库2 银行转账实例
    转 Python爬虫实战一之爬取糗事百科段子
    SQL 锁 lock
    SQL SERVER CROSS/OUTER APPLY 用法
    sql server 怎样用select语句调用自定义表值函数
    计算日期类型
    行转列:SQL SERVER PIVOT与用法解释
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740643.html
Copyright © 2020-2023  润新知