本题链接:点击打开链接
本题大意:
有n名队员,已知每名队员打比赛的输赢,问,能否据此确定冠军。
解题思路:
就是将所有比赛中失败过的做标记,据题知:失败过的就不可能再成为冠军,所以就看最后未标记的有几个,若只有一个,则说明其就是所认定的冠军,否则就确定不了冠军。主要是字符串难处理,具体请参见代码:
#include<stdio.h>
#include<string.h>
char str[1010][100];
char win[100],lose[100];
int mark[1010];
int main()
{
int n,i,sum;
while(scanf("%d",&n),n)
{
i=0;
memset(mark,0,sizeof(mark));
while(n--)
{
int flagw=0,flagl=0;//flagw 标记出现过的赢者,flagl标记出现过的输者
scanf("%s%s",win,lose);
if(i==0)
{
strcpy(str[i++],win);
strcpy(str[i++],lose);
mark[i-1]=1;//mark loser;
}
else
{
for(int j=0;j<i;j++)
{
if(strcmp(str[j],win)==0)
flagw=1; //标记已登记过的winer
if(strcmp(str[j],lose)==0)
{
mark[j]=1; //标记输者
flagl=1; //标记已登记过的loser
}
}
if(!flagw)
strcpy(str[i++],win);
if(!flagl)
{
strcpy(str[i++],lose);
mark[i-1]=1;
}
}
}
sum=0;
for(int j=0;j<i;j++)
{
if(mark[j]==0)//查找未被标记过的
sum++;
}
if(sum!=1)//若有多个未被标记,则无法确定冠军
printf("No\n");
else
printf("Yes\n");
}
return 0;
}