病人排队

描述

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

  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

C语言:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char ID[10];
    int years;
    int rank;
}Patient;

void read_data(Patient *arr, int size);
void print_data(Patient *arr, int size);
int Compare(const void *a, const void *b);

int main(void)
{
    int n;
    scanf("%d", &n);
    Patient arr[n];
    read_data(arr, n);
    qsort(arr, n, sizeof(Patient), Compare);
    print_data(arr, n);
    
    
}

void read_data(Patient *arr, int size)
{
    int i;
    for (i=0; i<size; i++){
        scanf("%s %d", &arr[i].ID, &arr[i].years);
        arr[i].rank = i;  // 记录病人的先后顺序
    }
}

void print_data(Patient *arr, int size)
{
    int i;
    for (i=0; i<size; i++){
        printf("%s\n", arr[i].ID);
//      printf("%s %d\n", arr[i].ID, arr[i].years);
    }
}

int Compare(const void *a, const void *b)
{
    Patient *pa = (Patient *)a;
    Patient *pb = (Patient *)b;
    int year_a = pa->years;
    int year_b = pb->years;
    if (year_a >= 60 || year_b >= 60) {
        if (year_a >= 60 && year_b >= 60) {
            return year_b - year_a;
        } else if (year_a >= 60) {
            return -1;
        } else if (year_b >= 60) {
            return 1;
        } else {
            return pa->rank - pb->rank;  // 同龄的老年人按先后顺序排
        }
    } else {
        return pa->rank - pb->rank;  // 年轻人按先后顺序排
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对你来说,短信服务商做什么的?垃圾短信服务?或者短信群发验证码?或者会被微信代替的工具?那对于企业来讲,短信又意味...
    duguhan29阅读 2,555评论 0 0
  • Yu玉阅读 1,599评论 0 0
  • 5 胜威国际以诚信为本,懂得感恩胜威国际集团是作为一个有良知的企业的使命担当,掷地有声,毋庸置疑!学会感恩,懂得...
    胜V彬彬有你阅读 3,449评论 0 0
  • 1、为自己的产品策划一次以拉新(获客、增粉等都算,如果自己没有产品,假设自己的一个公众号)活动,建议用清晰明了的文...
    boloneyc阅读 1,202评论 0 0