1. 程式人生 > 其它 >PTAt140競賽排名:(結構體)

PTAt140競賽排名:(結構體)

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; }