1183 病人排队
【题目描述】
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄 >= 60岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
【输入】
第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
【输出】
按排好的看病顺序输出病人的ID,每行一个。
本题由于条件特殊用结构体输入输出比较符合条件
#include<iostream>
#include<string>
using namespace std;
struct block
{
string id;
int age;
block *next;
};
void insert(block*&head) //输入排序
{
string ee;
int go;
cin >>ee>>go;
block*i;
i=new block;
i->id=ee;
i->age=go;
i->next=NULL;
if(head==NULL)
{
head=i;
return ;
}
int d=1;
if(go<60) //判断条件是否符合
d=0;
if(go>head->age&&d)
{
i->next=head;
head=i;
return ;
}
block *y=head;
for(; y->next!=NULL; y=y->next)
{
if(y->next->age<go&&d)
{
block *io;
io=y->next;
y->next=i;
i->next=io;
return ;
}
}
y->next=i;
}
void print(block*&head) //输出
{
while(head!=NULL)
{
cout <<head->id << endl;
head=head->next;
}
}
int main()
{
block*sam;
sam=NULL;
int n;
cin >>n;
while(n&&n--)
insert(sam);
print(sam);
}