剪子包袱锤

Problem C: 剪子包袱锤游戏

Time Limit: 1 Sec  Memory Limit: 2 MB
Submit: 1216  Solved: 525
[Submit][Status][Web Board]

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 3Tom Jack MaryRock Rock RockRock Paper ScissorsRock Scissors Scissors

Sample Output

Tie.No winner, no loser.Tom win Jack,Mary.

HINT

Append Code

#include <stdio.h>
#include <string.h>
int main()
{
    int m,n,i,j,sum;
    int flag1,flag2,flag3;
    char a[10][10];
    char b[10][10];
    int s[10],r[10],p[10];
    int i1,i2,i3,k;
    scanf("%d %d",&m,&n);
    for(i=0; i<n; i++)
    {
        scanf("%s",&a[i]);
    }
    for(k=0; k<m; k++)
    {
        flag1=0,flag2=0,flag3=0;
        i1=0,i2=0,i3=0;
        for(j=0; j<n; j++)
        {
            scanf("%s",&b[j]);
            if(!strcmp(b[j],"Scissors"))
            {
                flag1=1;
                s[i1++]=j;
            }
            else if(!strcmp(b[j],"Paper"))
            {
                flag2=1;
                p[i2++]=j;
            }
            else if(!strcmp(b[j],"Rock"))
            {
                flag3=1;
                r[i3++]=j;
            }
        }
        if(flag1&&flag2&&flag3)
            printf("No winner, no loser.\n");
        else if((flag1&&!flag2&&!flag3)||(!flag1&&flag2&&!flag3)||(!flag1&&!flag2&&flag3))
            printf("Tie.\n");
        else
        {
            if(flag1&&flag2)
            {
                for(i=0; i<i1; i++)
                {
                    if(i==i1-1)
                        printf("%s ",a[s[i]]);
                    else
                        printf("%s,",a[s[i]]);
                }
                printf("win ");
                for(i=0; i<i2; i++)
                {
                    if(i==i2-1)
                        printf("%s.\n",a[p[i]]);
                    else
                        printf("%s,",a[p[i]]);
                }
            }
            else if(flag1&&flag3)
            {
                for(i=0; i<i3; i++)
                {
                    if(i==i3-1)
                        printf("%s ",a[r[i]]);
                    else
                        printf("%s,",a[r[i]]);
                }
                printf("win ");
                for(i=0; i<i1; i++)
                {
                    if(i==i1-1)
                        printf("%s.\n",a[s[i]]);
                    else
                        printf("%s,",a[s[i]]);
                }
            }
            else if(flag2&&flag3)
            {
                for(i=0; i<i2; i++)
                {
                    if(i==i2-1)
                        printf("%s ",a[p[i]]);
                    else
                        printf("%s,",a[p[i]]);
                }
                printf("win ");
                for(i=0; i<i3; i++)
                {
                    if(i==i3-1)
                        printf("%s.\n",a[r[i]]);
                    else
                        printf("%s,",a[r[i]]);
                }
            }
        }
    }
}

PS(挺简单的一道题,可以用结构体可能更简单一点。要是想精简一下,可以在最后输出3个函数,一开始对strcmp相等的条件记错了,应该是相等为零!)

发布了28 篇原创文章 · 获赞 4 · 访问量 4836

猜你喜欢

转载自blog.csdn.net/xxw2016/article/details/78997035