1 条题解
-
0
自动搬运
来自洛谷,原作者为

wpy233
你弱归你弱,py比你弱。 stO 所有关注我的巨佬 Orz搬运于
2025-08-24 21:20:50,当前版本为作者最后更新于2019-07-07 10:02:32,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
结构体排序严重好评
众所周知,
sort是一个特别好的东西,但当排序面对的对象是结构体时,sort就不能自动排了,还需要手写填一个comp函数。comp函数框架:
bool comp(结构体名称 x,结构体名称 y) { 按照题目的要求进行比较,并返回true或false; }在这道题中,comp的框架完全可以这样写:
bool comp(xx x,xx y) { if(x.zf!=y.zf)//如果两个变量的总分不相同 return x.zf>y.zf;//直接比较,总分大的在前面 else if(x.yw!=y.yw)//如果两个学生总分相同、语文分数不相同 return x.yw>y.yw;//语文分数大的排在前面 else return x.bh<y.bh;//如果总分相同、语文分数也相同,编号小的在前面 }再加上一些头文件定义、输入输出、初始化什么的,这题就AC了!
#include <bits/stdc++.h>//万能头文件 using namespace std; struct xx{//定义结构体“学生”类型 int yw;//语文分数 int ss;//数学分数 int yy;//英语分数 int zf;//总分 int bh;//编号 }a[305];//可以直接定义,注意定义结构体是后括号后一定要加上分号 int n; bool comp(xx x,xx y) { if(x.zf!=y.zf) return x.zf>y.zf; else if(x.yw!=y.yw) return x.yw>y.yw; else return x.bh<y.bh; }//comp结构体排序,上文已经解释过 int main() { cin>>n;//输入 for(int i=1;i<=n;i++) { cin>>a[i].yw>>a[i].ss>>a[i].yy;//输入第i位学生的语文、数学、英语 a[i].bh=i;//存储学生的编号 a[i].zf=a[i].yw+a[i].ss+a[i].yy;//定义总分 } sort(a+1,a+n+1,comp);//排序 for(int i=1;i<=5;i++) cout<<a[i].bh<<" "<<a[i].zf<<endl;//循环输出 return 0; }
- 1
信息
- ID
- 95
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者