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;
}
原文地址:https://www.cnblogs.com/JinxiSui/p/9740643.html