PTAt140競賽排名:(結構體)
阿新 • • 發佈:2021-10-29
pta t140 競賽排名:(結構體) 思路:構造一個name&&score的struct 難點:自定義的find和加分的方法和輸出方式 int find(player a[],string s,int pos){ int k; for(k=0;k<pos;k++){ if(a[k].name==s)break; } if(k==pos)return -1; //找不到就輸出-1 else return k; //找得到舊結構體的下標並輸出} void run(){** int n;cin>>n; cnt=0; for(int i=0;i<n*(n-1)/2;i++){ string s1,s2; int d; cin>>s1>>s2>>d; int p1=find(players,s1,cnt); //輸出下標 int p2=find(players,s2,cnt); int curpos1=p1,curpos2=p2; if(p1==-1){ //新的name時 players[cnt].name=s1; //讀入新的struct players[cnt].score=0; cnt++; //struct數++ curpos1=cnt-1; //curpos1為其下標(cnt++減1) } if(p2==-1){ players[cnt].name=s2; players[cnt].score=0; cnt++; curpos2=cnt-1; } if(d==0){ //平局時都加1分 players[curpos1].score++; players[curpos2].score++; } else{ players[curpos1].score+=3; } } mysort(players,n); cout<<'1'<<' '<<players[0].name; //先輸出第一名 for(int j=1;j<n;j++){ if(players[j].score==players[j-1].score){ //若分數相等,同行輸出 cout<<' '<<players[j].name; } else{ cout<<endl; cout<<j+1<<' '<<players[j].name; //第一名是players[0],而j是從1開始遍歷所以j+1才為名次 } } cout<<endl; }