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

 

上一篇:单词个数(map应用)


下一篇:树的层序遍历