病人排队问题

*## 病人排队问题
题目描述
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

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

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

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

第1行,输入一个小于100
的正整数,表示病人的个数;

后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10
的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。

按排好的看病顺序输出病人的ID,每行一个。

思路
首先,这是一道排序的题目。我们可以将病人归为两个大类:一个是过了60岁的病人,一个是没过。由于题目的特殊性,我们需要用struct的输入方法来绑定病人的年龄,编号和顺序。在判断病人这一块,我们可以将主要的判断分成3个大类。 (两个病人同时大于60岁,两个病人同时小于60岁,一个大于60一个小于60)(使用bool判断规则函数) 在两个大于60的病人中,我们判断他们年龄大小,(如果相同便要顺序)。在一大一小的判断中,我们只需要找年龄小的。而在两个小于60的病人中,我们则需要用顺序来排序。最后,输出排完序的编号就行。

代码

#include<bits/stdc++.h>
using namespace std;


struct ren
{
	string bh;
	int nl;
	int sx;
} a[110];
int n; 
bool sx(ren x1,ren x2)
{
	if(x1.nl>=60&&x2.nl>=60)
	  return x1.nl==x2.nl?x1.sx<x2.sx:x1.nl>x2.nl;
	else if(x1.nl<60&&x2.nl<60)
	  return x1.sx<x2.sx;
	else
	  return x1.nl>x2.nl;
}
int main()
{
   cin>>n;
   for(int i=1;i<=n;i++)
   {
   	  cin>>a[i].bh>>a[i].nl;
      a[i].sx=i;
   } 
   sort(a+1,a+1+n,sx);
   for(int i=1;i<=n;i++)
     cout<<a[i].bh<<endl;
   return 0;
}
实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。 实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值