NOIP2007 奖学金 结构体排序
排序 结构
2023-09-11 14:20:17 时间
是结构体排序的练习题,可供选手们巩固结构体排序的一些相关内容。
关于结构体排序
1.结构体定义
struct student { int num,a,b,c,sum; }p[310];
2.结构体初始化
for(int i=1;i<=n;i++) { scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c); p[i].num=i; p[i].sum=p[i].a+p[i].b+p[i].c; }
3.sort函数实现结构体排序
首先要知道sort函数在算法库里。 也就是
#include<algorithm>
具体使用方法如下,假如要给0-i的a数组按从小到大排序。
sort(a,a+i);
这里要注意,sort函数默认排序顺序是从小到大!! 但是有些同学(比如说我)喜欢空出0号位数组,从1开始读入,该咋排? 很简单:
sort(a+1,a+i+1);
4.cmp自定义函数
bool cmp(student a,student b) { /*code*/ }
bool cmp(student a,student b) { if(a.sum!=b.sum) return a.sum>b.sum; else if(a.a!=b.a) return a.a>b.a; else return a.num<b.num; }
好的,现在这道水题练习题就可以随随便便A掉了。 最后上AC代码:
#include<bits/stdc++.h> using namespace std; struct student { int num,a,b,c,sum; }p[310]; bool cmp(student a,student b) { if(a.sum!=b.sum) return a.sum>b.sum; else if(a.a!=b.a) return a.a>b.a; else return a.num<b.num; } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c); p[i].num=i; p[i].sum=p[i].a+p[i].b+p[i].c; } sort(p+1,p+n+1,cmp); for(int i=1;i<=5;i++) printf("%d %d\n",p[i].num,p[i].sum); return 0; }
相关文章
- Golang 实现 set 集合,变相实现 切片去重、排序 功能
- 数据结构和算法-排序算法-希尔排序
- 【刷题】面筋-数据结构-排序算法的复杂度、稳定性、内部外部排序
- LeetCode(26): 删除排序数组中的重复项
- LeetCode(23):合并K个排序链表
- 合并两个list集合并且排序
- java算法 -- 归并排序
- ZZNUOJ_用C语言编写程序实现1182:按出生日期排序(结构体专题)(附完整源码)
- 1748. 唯一元素的和-快速排序,加条件遍历
- STL sort对vector中的结构体进行排序
- C++中sort函数从大到小排序的两种方法
- Python对字典(directory)按key和value排序
- 排序算法
- Linux Sort将文件中的各行进行排序