【病人排队】

题目描述:

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

  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

代码如下:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<istream>
#include<iomanip>
#include<ostream>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<stack>
#include<ctime>
#include<deque>
#include<queue>
#include <sstream>

#pragma warning (disable:4996)

using namespace std;

struct man{
	string s; int x; int number;
};

bool compare(man*a,man*b)
{
	if (a->x != b->x)
		return a->x > b->x;
	else
		return a->number < b->number;
}

int main()
{
	int n; cin >> n;  string s; int x; vector<man*> old; vector<man*> young;
	for (int i = 0; i < n; i++)
	{
		man *m = new man;
		cin >> s >> x;
		m->number = i; m->s = s; m->x = x;
		if (m->x < 60)
		{
			young.push_back(m);
		}
		else
		{
			old.push_back(m);
		}
	}
	sort(old.begin(),old.end(), compare);
	for (auto temp : old)
	{
		cout << temp->s << endl;
	}
	for (auto temp : young)
	{
		cout << temp->s << endl;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武帝为此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值