7-6 病人排队 (20 分)

7-6 病人排队 (20 分)
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

老年人(年龄 >= 60岁)比非老年人优先看病。
老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
非老年人按登记的先后顺序看病。
输入格式:
第1行,输入一个小于100的正整数,表示病人的个数;

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

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

输入样例:
在这里给出一组输入。例如:

5
021075 40
004003 15
010158 67
021033 75
102012 30
输出样例:
在这里给出相应的输出。例如:

021033
010158
021075
004003
102012


#include <stdio.h>
struct info
{
    char id[10];//病人ID
    int age;//年龄
};
int main()
{
    //保存病人信息
    struct info buff[100];
    int cnt;
    int i=0,j=0;
    scanf("%d",&cnt);//输入病人个数
    for(i=0;i<cnt;i++)
    {
        scanf("%s%d",buff[i].id,&buff[i].age);//输入id和年龄
    }
    /*
        按要求排序:
        1.老年人(年龄 >= 60岁)比非老年人优先看病。
        2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
        3.非老年人按登记的先后顺序看病。
    */
    struct info temp;
    for(i=0;i<cnt-1;i++)
    {
        for(j=0;j<cnt-i-1;j++)
        {
            if(buff[j].age<buff[j+1].age && buff[j+1].age>=60)//>=60按年龄排序,
            {
                temp=buff[j];
                buff[j]=buff[j+1];
                buff[j+1]=temp;
            }
        }
    }
    for(i=0;i<cnt;i++)
    {
        printf("%s\n",buff[i].id);
    }    
    return 0;
}


```c++
#include<bits/stdc++.h>
using namespace std;
struct data
{
    string s;
    int age;
}f[105];
int n;
bool comp(data a,data b)
{
    return a.age>b.age;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>f[i].s>>f[i].age;
        if(f[i].age<60)f[i].age=0;
    }
    stable_sort(f+1,f+n+1,comp);
    for(int i=1;i<=n;i++)
      cout<<f[i].s<<endl;
    return 0;  
}

```
一本通能过