題目地址:http://acm.hdu.edu.cn/showPRoblem.php?pid=2094
/**************************************************************
此題要產(chǎn)生冠軍的意思就是,最后只有一個人從來沒輸過。
如果兩個人沒輸過,也算沒產(chǎn)生冠軍。
所以,我們只需要統(tǒng)計有幾個人輸過。
/************************************************************
代碼思路:n場比賽,那么一共輸入2*n個名字,未出現(xiàn)過的名字加入到二維數(shù)組name中,sum統(tǒng)計總?cè)藬?shù),loser表示輸?shù)娜藬?shù)
首先用數(shù)組vis把所有人記錄為勝者。一旦某個人輸了,就把對應(yīng)的vis[j]賦值為0(敗者)。
/*****************************************************************
代碼如下:
/*************
#include<stdio.h>#include<string.h>char name[1001][100];//選手的名字 int main(){ char p[100]; int vis[1001]; int n,sum,loser; int flag; while(scanf("%d",&n),n>0) { for(int i=0;i<1001;i++) vis[i]=1; //假設(shè)所有人都是勝者 loser=0; //失敗者人數(shù)初始為0 sum=0; //參賽人數(shù)初始為0 for(int i=0;i<n*2;i++) { scanf("%s",p); flag=0; for(int j=0;j<sum;j++) { if(strcmp(p,name[j])==0) { if(i%2&&vis[j]==1)//敗方 { loser++; vis[j]=0;//敗了標(biāo)記為0 } flag=1; } } if(!flag)//新加入的一名比賽者 { strcpy(name[sum],p); if(i%2)//敗方(第偶數(shù)次輸入的)(i是從0開始的) { loser++; vis[sum]=0; } sum++; } } if(sum-loser==1)//只有一位冠軍 { puts("Yes"); } else { puts("No"); } } return 0;}
新聞熱點
疑難解答