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