当前位置: 首页 > article >正文

结构体排序 C++ 蓝桥杯

成绩排序

#include<iostream>
#include<algorithm>
using namespace std;
struct stu {
	string name;//名字
	int grade;//成绩
};
stu a[30];
bool cmp(stu l, stu r) {
	if (l.grade != r.grade) return l.grade > r.grade;
	return l.name < r.name;
}
int main() {
	int n; cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i].name >> a[i].grade;
	sort(a + 1, a + n + 1, cmp);

	for (int i = 1; i <= n; i++) cout << a[i].name << " " << a[i].grade << endl;

	return 0;
}

成绩排序思路:输入n名学生的名字和成绩,所以开结构体类型,学生包含两个属性,姓名和成绩,排序算法在打比赛时常用的是sort(在头文件algorithm下使用)。涉及到自己写的结构体类型时,必须要重写排序规则即代码中的bool cmp(stu l,stu r)函数作为sort的第三个参数。

bool cmp(stu l,stu r)   先是比较成绩,如果成绩不同,返回成绩高的在前。再返回名字字典序小的。

sort(a+1,a+n+1,cmp) ——  a+1:待排序区间的首元素——   a+n+1:待排序区间尾元素后一位——    cmp:比较器,排序规则。

最后输出排好序的数组里的每个元素的名字+空格+对应的成绩+换行。

明明的随机数

#include<iostream>
#include<set>
using namespace std;
int main() {
	set<int>s;//集合-去重+排序
	int n; cin >> n;
	for (int i = 1; i <= n; i++) {
		int x; cin >> x;
		s.insert(x);
	}
	cout << s.size() << endl;
	for (auto i : s) cout << i << " ";
	return 0;
}

明明的随机数方法一

set解决思路:直接用集合,因为本题要对一组数去重,并且排序,从小到大。集合会自动对传入的数进行去重和排序。最后输出集合里的元素个数,换行输出排好了的集合每一个元素。

集合知识点:stl容器之一   ——    standard    template   library  —— 标准模板库

集合头文件:include<set>

集合的创建:set<int>s; ——关键字<集合里元素类型>集合名

向集合里插入元素:s.insert(x)——向集合里插入值x

求集合元素个数:s.size()——直接输出去重排序后的集合元素个数

集合输出不能用下标增强for循环——for(auto i:s)  ——auto  i:s——自动 识别集合s里的每个元素类型,让i去从头到尾遍历每个元素。所以直接输出  i   ,cout<<i<<"  ";

#include<iostream>
using namespace std;
const int N = 1e3 + 10;
int cnt[N];
int main() {
	int n; cin >> n;
	//  计数排序
	for (int i = 1; i <= n; i++) {
		int x; cin >> x;
		cnt[x]++;
	}
	//  统计去重后有多少个元素
	int ans = 0;
	for (int i = 0; i <= 1000; i++) {
		if (cnt[i] != 0) ans++;
	}
	cout << ans << endl;
	//  输出去每个元素(去重)
	for (int i = 0; i <= 1000; i++) {
		if (cnt[i] != 0) cout << i << " ";
	}

	return 0;
}

明明的随机数方法二

计数排序解决思路

①开一个计数数组,大小由所有可能出现的数的最大值决定。循环输入每一个数,将每一个数作为计数数组的下标,每个数出现次数作为这个元素的值。

②循环遍历每一个下标,判断a[i]元素值是否不等于0,不等于0就将ans(记录去重后的总数)++,输出ans及换行

③循环遍历每一个下标,判断a[i]元素值是否不等于0,不等于0就直接输出下标i,cout<<i<<" "

完结!!!⠀՞⸝⸝. .⸝⸝՞˳ഒ


http://www.kler.cn/a/532715.html

相关文章:

  • STM32单片机学习记录(2.2)
  • openRv1126 AI算法部署实战之——Tensorflow模型部署实战
  • 【Redis】主从模式,哨兵,集群
  • 洛谷 P11626 题解
  • PHP Mail:高效邮件发送解决方案详解
  • SAP HCM 回溯分析
  • C++引用练习题
  • 基于springboot的电影评论网站(源码+数据库+文档)
  • PVE纵览-实现极致性能:在Proxmox VE中配置硬盘直通
  • Office / WPS 公式、Mathtype 公式输入花体字、空心字
  • 【C# 】图像资源的使用
  • 结合 vim-plug 安装并使用 Gruvbox 主题教程
  • 使用Posix共享内存区实现进程间通信
  • 二维数组 C++ 蓝桥杯
  • vue生命周期及其作用
  • 基于机器学习的布伦特原油价格的分析与研究
  • 通向AGI之路:人工通用智能的技术演进与人类未来
  • 数据库索引:秋招面试中的经典高频题目 [特殊字符](索引原理/操作/优缺点/B+树)
  • module_init宏是什么?
  • web-XSS-CTFHub
  • python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理
  • 线程创建与管理 - 创建线程、线程同步(C++)
  • git进阶--6---git stash
  • 一文了解边缘计算
  • 数据降维技术研究:Karhunen-Loève展开与快速傅里叶变换的理论基础及应用
  • RabbitMQ深度探索:简单实现 MQ