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相等的条件记错了,应该是相等为零!)