题目描述
【题目描述】
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄 >= 60岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
【输入】
第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
【输出】
按排好的看病顺序输出病人的ID,每行一个。
【输入样例】
5
021075 40
004003 15
010158 67
021033 75
102012 30
【输出样例】
021033
010158
021075
004003
102012
审题:
条件非常的多,让我们一条一条看
1.老年人在前
2.老年人年龄越大越先看病,相同按报名顺序
3.年轻人按报名顺序
由于一个病人有多个信息,需要用结构体存储
代码实现:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<ctime>
using namespace std;
int n;
struct node{//定义一个结构体
int age,id1;//年龄和报名顺序
string id;//输入的id
}a[110];
bool cmp(node x,node y)
{
if(x.age<60 && y.age<60) return x.id1<y.id1;//都不是老年人,按报名顺序
if(x.age==y.age) return x.id1<y.id1;//是老年人且年龄相同,也按报名顺序排
return x.age>y.age;//是老年人且年龄不同,按年龄大小排
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].id>>a[i].age;//输入
a[i].id1=i;
}
sort(a+1,a+n+1,cmp);//排序
for(int i=1;i<=n;i++)
{
cout<<a[i].id<<endl;//输出
}
return 0;
}
没有账号复制这里↓
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<ctime>
using namespace std;
int n;
struct node{//定义一个结构体
int age,id1;//年龄和报名顺序
string id;//输入的id
}a[110];
bool cmp(node x,node y)
{
if(x.age<60 && y.age<60) return x.id1<y.id1;//都不是老年人,按报名顺序
if(x.age==y.age) return x.id1<y.id1;//是老年人且年龄相同,也按报名顺序排
return x.age>y.age;//是老年人且年龄不同,按年龄大小排
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].id>>a[i].age;//输入
a[i].id1=i;
}
sort(a+1,a+n+1,cmp);//排序
for(int i=1;i<=n;i++)
{
cout<<a[i].id<<endl;//输出
}
return 0;
}