一、阅读题目
题目描述
编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
- 老年人(年龄 ≥60 岁)比非老年人优先看病。
- 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
- 非老年人按登记的先后顺序看病。
根据题目可以得知,只是要用多级排序考虑到所有情况可以写出4个排序
二、输入输出
输入格式
第 1 行,输入一个小于 100 的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于 10 的字符串表示病人的 ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
输出格式
按排好的看病顺序输出病人的 ID,每行一个。
输入输出样例
输入 #1
5 021075 40 004003 15 010158 67 021033 75 102012 30
输出 #1
021033 010158 021075 004003 102012
可以得知ID为string(char id[10])类型
age为int,而题目中有一个隐藏变量order(先后顺序)为int
三、编写代码
基础框架
#include<bits/stdc++.h>
using namesapce std;
struct people{
string id;
int age,order;
};
people a[110];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].id>>a[i].age;
a[i].order=i;
}
return 0;
sort+cmp
bool cmp(people a,people b) {
if (a.age >= 60 && b.age >= 60) {
if (a.age != b.age) {
return a.age > b.age;
} else {
return a.order < b.order;
}
}
else if (a.age >= 60 && b.age < 60) {
return true;
}
else if (a.age < 60 && b.age >= 60) {
return false;
}
else {
return a.order < b.order;
}
}
......
sort(a,a+n,cmp);
考虑到所有情况,写出都是老人,一个老人与一个非老人和两个都是非老人
输出
有手就行,用数组遍历
总代码
#include<bits/stdc++.h>
using namespace std;
struct people{
int age;
string id;
int order;
};
people a[110];
bool cmp(people a,people b) {
if (a.age >= 60 && b.age >= 60) {
if (a.age != b.age) {
return a.age > b.age;
} else {
return a.order < b.order;
}
}
else if (a.age >= 60 && b.age < 60) {
return true;
}
else if (a.age < 60 && b.age >= 60) {
return false;
}
else {
return a.order < b.order;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].id>>a[i].age;
a[i].order=i;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i].id<<endl;
}
return 0;
}
760

被折叠的 条评论
为什么被折叠?



