问题标题: 酷町堂:4194

0
0
已解决
邓涵睿
邓涵睿
中级天翼
中级天翼

选手名次

题目详情

题目描述 Description

n名选手参加比赛,比赛共分A,B,C 3个项目,现在选手们已经比完了全部项目,请你给他们排个名次,并输出前k名选手的信息。

排名按照这样的规则:先比较总分,总分高者名次在前;如果总分相同,则A项目得分高者排在前;如果A项目得分也相同,则选手名字字典序小的排在前。

输入描述 Input Description

n+1行,
第1行,一个正整数n,表示选手的人数(n<=50),一个正整数k,表示要输出前k名选手的信息。
后面n行,每行分别输入选手的姓名以及A,B,C三个项目的得分。

输出描述 Output Description

k行,前k名选手的信息。
每行分别输出选手的姓名以及A,B,C三个项目的得分。

样例输入 Sample Input

5 3 daxiong 70 50 60 xiaofu 50 80 50 panghu 60 70 60 jingxiang 90 50 60 duola 80 60 90

样例输出 Sample Output

duola 80 60 90 jingxiang 90 50 60 panghu 60 70 60

订正中,请大佬们找错

#include<iostream> 
#include<algorithm>
#include<string>
using namespace std;
struct d{
	string name;
	int A,B,C;
}a[60];
bool cmp(d x,d y){
	if(x.A+x.B+x.C!=y.A+y.B+y.C) return x.A+x.B+x.C>y.A+y.B+y.C;
    if(x.A!=y.A) return x.A>y.A;
    return x.name<y.name;
}
int main(){
	int n;
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i].name>>a[i].A>>a[i].B>>a[i].C;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
		cout<<a[i].name<<" "<<a[i].A<<" "<<a[i].B<<" "<<a[i].C<<endl;
    }
    return 0;
}

 

邓涵睿在2020-11-05 17:17:52追加了内容

我加豆!

邓涵睿在2020-11-05 17:32:46追加了内容

@李显晨

好了吗


0
已采纳
李显晨
李显晨
中级启示者
中级启示者
#include<iostream> 
#include<algorithm>
#include<string>
using namespace std;
struct d{
    string name;
    int A,B,C;
    int sum(){
        return A+B+C;
    }
}a[60];
bool cmp(d x,d y){
    if(x.sum()!=y.sum()) return x.sum()>y.sum();
    if(x.A!=y.A) return x.A>y.A;
    return x.name<y.name;
}
int main(){
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].A>>a[i].B>>a[i].C;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=k;i++){
        cout<<a[i].name<<" "<<a[i].A<<" "<<a[i].B<<" "<<a[i].C<<endl;
    }
    return 0;
}

 

0
0
李显晨
李显晨
中级启示者
中级启示者

这题可以用更简单的方法做:定义一个结构体函数

函数

struct d{
    string name;
    int A,B,C;
    int sum(){
        return A+B+C;
    }
}a[60];

所以排序就可以这么写

bool cmp(d x,d y){
    if(x.sum()!=y.sum()) return x.sum()>y.sum();
    if(x.A!=y.A) return x.A>y.A;
    return x.name<y.name;
}

so你的k呢???

输出是从1到k

我要回答