HD2094_产生冠军
生活随笔
收集整理的這篇文章主要介紹了
HD2094_产生冠军
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description
有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。
球賽的規則如下:
如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那么就認定,A一定能打敗C。
如果A打敗了B,B又打敗了C,而且,C又打敗了A,那么A、B、C三者都不可能成為冠軍。
根據這個規則,無需循環較量,或許就能確定冠軍。你的任務就是面對一群比賽選手,在經過了若干場撕殺之后,確定是否已經實際上產生了冠軍。
?
Input 輸入含有一些選手群,每群選手都以一個整數n(n<1000)開頭,后跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝后者。如果n為0,則表示輸入結束。
?
Output 對于每個選手群,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。
?
Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0 ?
Sample Output Yes No ?
?感覺這一題出的有問題,提交正確的程序和題目描述的不相符,也許是我今天沒有看出來吧,以后再看,先貼出代碼。 這一題的意思就是求能否產生冠軍,程序所用的思想就是首先記錄第一個獲勝的人的姓名,之后再添加進來點獲勝選手先判斷時候已經出現過,如果出現過則不記錄,否則記錄下來;對于輸的人也是需要判重,然后添加進來,如下邊代碼:
#include <stdio.h> #include <string.h> struct {char name[50];int a; }s[1005]; int main () { int n,i,j,t,p; char n1[50],n2[50]; while (scanf("%d",&n)!=EOF,n) {t=0;for (i=0;i<n;i++){scanf("%s %s",n1,n2);//輸入。。for (j=0;j<t;j++){if (strcmp(n1,s[j].name)==0) break; // 和已存的名字比較,看是否重復了}if (j==t) //將名字復制到結構體的name中,并復制a為0,(出現多少贏過的至少一場比賽的人)t++;{strcpy(s[j].name,n1);s[j].a=0;t++;}for (j=0;j<t;j++) {if (strcmp(n2,s[j].name)==0) //看n2是否出現過,若出現過則記錄輸的次數。{s[j].a+=1;break;}}if (j==t) //j==t,說明n2沒出現過,所以將名字復制到s[j].name中。{strcpy(s[j].name,n2);s[j].a=1;t++;}}p=0;for (i=0;i<t;i++){if (s[i].a==0) p++;}if (p==1) printf ("Yes\n");else printf ("No\n"); } return 0; }
球賽的規則如下:
如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那么就認定,A一定能打敗C。
如果A打敗了B,B又打敗了C,而且,C又打敗了A,那么A、B、C三者都不可能成為冠軍。
根據這個規則,無需循環較量,或許就能確定冠軍。你的任務就是面對一群比賽選手,在經過了若干場撕殺之后,確定是否已經實際上產生了冠軍。
?
Input 輸入含有一些選手群,每群選手都以一個整數n(n<1000)開頭,后跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝后者。如果n為0,則表示輸入結束。
?
Output 對于每個選手群,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。
?
Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0 ?
Sample Output Yes No ?
?感覺這一題出的有問題,提交正確的程序和題目描述的不相符,也許是我今天沒有看出來吧,以后再看,先貼出代碼。 這一題的意思就是求能否產生冠軍,程序所用的思想就是首先記錄第一個獲勝的人的姓名,之后再添加進來點獲勝選手先判斷時候已經出現過,如果出現過則不記錄,否則記錄下來;對于輸的人也是需要判重,然后添加進來,如下邊代碼:
#include <stdio.h> #include <string.h> struct {char name[50];int a; }s[1005]; int main () { int n,i,j,t,p; char n1[50],n2[50]; while (scanf("%d",&n)!=EOF,n) {t=0;for (i=0;i<n;i++){scanf("%s %s",n1,n2);//輸入。。for (j=0;j<t;j++){if (strcmp(n1,s[j].name)==0) break; // 和已存的名字比較,看是否重復了}if (j==t) //將名字復制到結構體的name中,并復制a為0,(出現多少贏過的至少一場比賽的人)t++;{strcpy(s[j].name,n1);s[j].a=0;t++;}for (j=0;j<t;j++) {if (strcmp(n2,s[j].name)==0) //看n2是否出現過,若出現過則記錄輸的次數。{s[j].a+=1;break;}}if (j==t) //j==t,說明n2沒出現過,所以將名字復制到s[j].name中。{strcpy(s[j].name,n2);s[j].a=1;t++;}}p=0;for (i=0;i<t;i++){if (s[i].a==0) p++;}if (p==1) printf ("Yes\n");else printf ("No\n"); } return 0; }
總結
以上是生活随笔為你收集整理的HD2094_产生冠军的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven 引入war
- 下一篇: HD_2037今年暑假不AC