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