上节课作业分析讲解:
链接:https://pan.baidu.com/s/15b4fJq1Xxd2X6uB9CJuVXw?pwd=r9nt
提取码:r9nt
结构体应用
sort排序函数回顾
结构体排序
结构体排序,排序的时候给cmp函数传递的是新创建的结构体类型,所以函数里形参类型就是结构体的类型
例题1
#include<iostream> #include<algorithm> using namespace std; // 定义学生结构体 struct student{ string name; // 学生姓名 int id; // 学生学号 double sum; // 学生总分 } x[110]; // 存放学生的数组,最多存放110个学生 // 比较函数,用于排序学生数组 bool cmp(student x, student y){ return x.sum > y.sum; // 根据学生总分降序排序 } int main(){ int n; cin >> n; // 输入学生数量 for(int i = 1; i <= n; i++) { cin >> x[i].name >> x[i].id >> x[i].sum; // 输入每个学生的姓名、学号和总分 } sort(x + 1, x + 1 + n, cmp); // 对学生数组进行排序 for(int i = 1; i <= n; i++) { cout<<x[i].name<<" "<<x[i].id<<" "<<x[i].sum<<endl; // 输出排序后的学生信息 } return 0; }View Code
例题2
cmp函数内部编写排序逻辑
定义一个结构体,成员有六个,分别为字符串类型存储姓名、整数类型存储学号、浮点数类型存储语、数、英成绩,总分。定义一个结构体数组,然后输入每个人信息,先按总分从高到低排序,如果总分相同,就按语文成绩从高到低排序,如果语文成绩也相同那么就按学号从小到大排序。 1、定义变量,声明结构体类型,包含姓名,语数英成绩,总分,学号 2、输入变量 n 和 n 个学生的信息 3、排序 3.1、总分从高到低排序 3.2、总分相同,就按语文成绩从高到低排序 3.3、总分和语文成绩都相同,学号从小到大排序 4、输出 【参考代码】 #include<iostream> #include<algorithm> using namespace std; struct stu { string name; //姓名 int id; //学号 double chinese , math , english , sum; //语文成绩 数学成绩 英语成绩 总分 } x[110]; bool cmp(stu a , stu b) { if(a.sum != b.sum) return a.sum > b.sum; else if(a.chinese != b.chinese) return a.chinese > b.chinese; else return a.id < b.id; } int main() { //1、定义变量,声明结构体类型,包含姓名,语数英成绩,总分,学号 int n; //2、输入变量 n 和 n 个学生的信息 cin >> n; for(int i = 1; i <= n; i++) { cin >> x[i].name >> x[i].chinese >> x[i].math >> x[i].english; x[i].id = i; x[i].sum = x[i].chinese + x[i].math + x[i].english; } //3、排序 sort(x + 1 , x + 1 + n , cmp); //4、输出 cout << x[1].name << " " << x[1].sum << endl; cout << x[2].name << " " << x[2].sum << endl; return 0; }View Code
pair
例题3:
【思路分析】 定义一个结构体,成员有两个,分别为字符串类型存储姓名、整数类型存储效率。然后定义一个结构体数组,然后输入每个人信息,然后按照效率进行降序排序。最后按照格式进行输出。 1、定义变量,声明结构体类型,包含两个属性,分别为姓名和效率 2、输入 n 和 n 个人的信息 3、排序 4、输出 【参考代码】 #include <iostream> #include <algorithm> using namespace std; const int maxn = 19; struct people { string name; int w; } a[maxn]; bool cmp(people x, people y) { return x.w > y.w; } int main() { //1、定义变量,声明结构体类型,包含两个属性,分别为姓名和效率 int n; //2、输入 n 和 n 个人的信息 cin >> n; for (int i = 0; i < n; i++) cin >> a[i].name >> a[i].w; //3、排序 sort(a, a + n, cmp); //4、输出 for (int i = 0; i < n; i++) cout << a[i].name << " " << a[i].w << '\n'; return 0; }View Code
例题3 生日
【题意分析】 输入 n 和 n 个人的信息,按照年龄从大到小排序,年龄一样,后输入的先输出。 【思路分析】 定义一个结构体,成员有四个,分别为字符串类型存储姓名、四个整数类型存储生日的年、月、日以及下标。然后定义一个结构体数组,然后输入每个人信息,然后按照年龄从大到小进行排序,注意题目要求如果有多个生日一样,则后面的先输出。最后按照格式进行输出。 1、定义变量,声明结构体类型,包含五个属性,姓名,年月日,输入顺序 2、输入 n 和 n 个人的信息 3、结构体排序 3.1、年份不同,年份从小到大排序 3.2、年份相同,月份不同,月份从小到大排序 3.3、年份相同,月份相同,日子不同,日期从小到大排序 3.4、年月日相同,输入顺序从大到小排序 4、输出 【参考代码】 #include <iostream> #include<algorithm> using namespace std; const int maxn = 109; struct people { string name; int year,month,day,id; } a[maxn]; bool cmp(people x, people y) { if (x.year != y.year) { return x.year < y.year; } if (x.month != y.month) { return x.month < y.month; } if (x.day != y.day) { return x.day < y.day; } return x.id > y.id; } int main() { //1、定义变量,声明结构体类型,包含五个属性,姓名,年月日,输入顺序 int n; //2、输入 n 和 n 个人的信息 cin >> n; for (int i = 0; i < n; i++) { cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day; a[i].id = i; } //3、结构体排序 //3.1、年份不同,年份从小到大排序 //3.2、年份相同,月份不同,月份从小到大排序 //3.3、年份相同,月份相同,日子不同,日期从小到大排序 //3.4、年月日相同,输入顺序从大到小排序 sort(a, a + n, cmp); //4、输出 for (int i = 0; i < n; i++) cout << a[i].name << '\n'; return 0; }View Code
本节课作业讲解:
链接:https://pan.baidu.com/s/1ixdm3IlY6oFCqIROOYP0zw?pwd=enrc
提取码:enrc
标签:int,sum,cmp,C++,U3,应用,排序,输入,总分 From: https://www.cnblogs.com/jayxuan/p/17894243.html