zhanghanwen1112 @ 2022-04-08 14:49:30
#include<bits/stdc++.h>
using namespace std;
struct student
{
string name;
int c,m,e,chenji;
}
a[1000];
int main()
{
int n,p;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>a[i].name;
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].chenji=a[i].c+a[i].m+a[i].e;
}
for(int i=0;i<=n-1;i++)
{
for(int j=i+1;j<=n-1;j++)
{
if(a[j].chenji>a[i].chenji)
{
swap(a[j],a[i]);
}
if(a[j].chenji==a[i].chenji)
{
if(a[j].name<a[i].name)
{
swap(a[j],a[i]);
}
}
}
}
cout<<a[0].name<<" "<<a[0].c<<" "<<a[0].m<<" "<<a[0].e;
return 0;
}
by ajahjahah @ 2022-04-08 14:52:17
如果有多个总分相同的学生,输出靠前的那位。
应该删掉这段
if(a[j].chenji==a[i].chenji)
{
if(a[j].name<a[i].name)
{
swap(a[j],a[i]);
}
}
by ajahjahah @ 2022-04-08 14:53:23
去掉就AC了
不过建议可以用sort(自定义函数或者是重载运算符)
by tangyi091025 @ 2022-04-08 14:57:07
中间改下
#include<bits/stdc++.h>
using namespace std;
struct student
{
string name;
int c,m,e,chenji;
}
a[1000];
int main()
{
int i,l,n,p;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>a[i].name;
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].chenji=a[i].c+a[i].m+a[i].e;
}
for(l=0;l<n;l++)
{
for(i=0;i<n;i++)
{
if(a[i].chenji<a[i+1].chenji)
{
swap(a[i].name,a[i+1].name);
swap(a[i].chenji,a[i+1].chenji);
swap(a[i].c,a[i+1].c);
swap(a[i].m,a[i+1].m);
swap(a[i].e,a[i+1].e);
}
}
}
cout<<a[0].name<<" "<<a[0].c<<" "<<a[0].m<<" "<<a[0].e;
return 0;
}
by tangyi091025 @ 2022-04-08 14:57:53
< 就行了
by zhanghanwen1112 @ 2022-04-08 14:57:57
@lao_ba 去掉哪儿?
by ajahjahah @ 2022-04-08 14:59:24
@zhanghanwen1112
这一段是多余的
if(a[j].chenji==a[i].chenji)
{
if(a[j].name<a[i].name)
{
swap(a[j],a[i]);
}
}
因为题目没有要求总成绩相等时按照名字字典序排序
by tangyi091025 @ 2022-04-08 15:00:08
如果有多个总分相同的学生,输出靠前的那位。