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

【每日一题】病人排队

题目描述

小理是个热爱生活的孩子。

病人登记看病,小理想编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

1. 老年人(年龄 ≥≥ 60岁)比非老年人优先看病。

2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

3. 非老年人按登记的先后顺序看病。

输入

第一行一个正整数 n(n≤100),表示病人的个数。

接下来 n 行,每行输入一个病人的信息,包括:

一个长度为 4 的字符串表示病人的编号(每个病人的编号各不相同且只含数字和大写字母),一个整数表示病人的年龄,中间用单个空格隔开。

输出

输出共 n 行,按排好的看病顺序输出病人的编号,每行一个字符串。

样例输入

5
1075 40
4003 15
01B8 65
1GC3 75
201A 30

样例输出

1GC3
01B8
1075
4003
201A
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;struct Patient {string id; // 病人编号int age;   // 病人年龄int order; // 病人登记的先后顺序
};bool cmp(Patient a, Patient b) {if (a.age >= 60 && b.age >= 60) { // 两个都是老年人,按照年龄从大到小排序if (a.age == b.age) return a.order < b.order; // 年龄相同按照登记先后顺序return a.age > b.age;}else if (a.age >= 60) return true; // a 是老年人,优先级更高,sort函数默认从小到大排序,即return a<b    所以当return true 时默认a<b为true,从小到大排序输出a。else if (b.age >= 60) return false; // b 是老年人,优先级更高,else return a.order < b.order; // 都是非老年人,按照登记先后顺序
}int main() {int n;cin >> n;Patient patients[n];for (int i = 0; i < n; i++) {cin >> patients[i].id >> patients[i].age;patients[i].order = i; // 记录登记的先后顺序}sort(patients, patients + n, cmp);for (int i = 0; i < n; i++) {cout << patients[i].id << endl;}return 0;
}

首先,定义一个结构体 Patient,包含病人的编号、年龄和登记的先后顺序。使用 bool cmp(Patient a, Patient b) 函数作为排序函数,根据题目要求实现排序规则。

然后,读入病人信息并记录登记的先后顺序。使用 sort 函数对病人信息进行排序。最后,按照排好的顺序输出病人编号。

// 沙壁vc里的c++要求数组必须是常量值,不能用变量

  1. 动态分配

int n;
cin >> n;
int *a=new int[n];
delete[]a;
  1. vector

int n;
cin >> n;
vector <int> a(n);
  1. 比赛是不会有这个问题,大都用GCC编译器

http://www.lryc.cn/news/42910.html

相关文章:

  • 【数据结构】链表OJ题
  • 冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)
  • [python tools] 今天看到另一个配置工具 YACS,所以做下笔记
  • Prometheus cadvisor容器监控和node-exporter节点监控
  • 机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记
  • python迭代器详解
  • 关于Docker逃逸
  • @Autowired和@Resource区别
  • 动态内存管理详细讲解
  • Python和Excel的完美结合:常用操作汇总(案例详析)
  • 卡特兰数、斯特林数基础
  • STL——mapmultimap和setmultiset
  • 2023热门抖音权重查询小程序源码
  • 153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]
  • 如何成为优秀的程序员
  • 多线程(四):线程安全
  • [ROC-RK3568-PC] [Firefly-Android] 10min带你了解Camera的使用
  • C++之模拟实现string
  • SpringBoot实战(十三)集成 Admin
  • mke2fs命令:建立ext2文件系统
  • 免费分享一个springboot+vue的办公系统
  • STM32数据搬运工DMA
  • 4、操作系统——进程间通信(2)(system V-IPC介绍)
  • 基于CentOS Stream 9平台搭建Nacos2.0.4集群以及OpenResty反向代理
  • 老杜MySQL入门基础 第二天
  • Python深度学习实战:人脸关键点(15点)检测pytorch实现
  • linux简单入门
  • 给准备面试网络工程师岗位的应届生一些建议
  • 主线程与子线程之间相互通信(HandlerThread)
  • 13基于双层优化的电动汽车日前-实时两阶段市场竞标