Kenaiii @ 2023-11-07 21:08:50
#include <stdio.h>
int main()
{
int n,j;
int a,b,c,total,champion=0,A,B,C;
char name[10],GOOD[10];
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(j=0;j<8;j++){
scanf("%c",&name[j]);
if(name[j]==' ')
break;
}
scanf("%d %d %d",&a,&b,&c);
total=a+b+c;
if(total>champion)
{
champion=total;
A=a;B=b;C=c;
for(j=0;j<8;j++){
GOOD[j]=name[j];
}
}
}
for(j=0;j<8;j++){
if(GOOD[j]!='\n')
printf("%c",GOOD[j]);
}
printf("%d %d %d",A,B,C);
return 0;
}
by Missdie @ 2023-11-07 21:18:01
这个题目主要是学会使用struct,可以用struct去写。对于struct,里面定义五个信息,姓名,三科分数,以及输入的次序。然后就可以重载小于符号,或者写个cmp,就这样了。
by ricky_lin @ 2023-11-07 21:28:49
建议使用 %s
读入,%c
的读入会读入很多奇怪的东西,比如换行符等之类的。
%s
的读入可以说更加完备
by Missdie @ 2023-11-07 21:30:11
就像这样
#include<bits/stdc++.h>
using namespace std;
struct student{
string name;//名字
int C, M, E;//语数外
int num;//序号
bool operator <(student const &b){
if (M + C + E == b.M + b.C + b.E)
return num < b.num;
return M + C + E > b.M + b.C + b.E;
}//重载运算符
}s[1005];
int t;
bool cmp(student a, student b){
if (a.M + a.C + a.E == b.M + b.C + b.E);
return a.num < b.num;
return a.M + a.C + a.E > b.M + b.C + b.E;
}//或者写一个判断函数
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> s[i].name >> s[i].C >> s[i].M >> s[i].E; s[i].num = i;
}
sort(s + 1, s + n + 1);
// sort(s + 1, s + n + 1, cmp);
cout << s[1].name << " " << s[1].C << " " << s[1].M << " " << s[1].E;
return 0;
}
定义的结构体就可以像原来的变量类型那样声明和使用了