某生物实验室记录了n种(n<=1000)病毒信息,每种病毒都有编号、传染性和致病性三个基本信息,编号是1000-9999的人工编号,其中的传染性和致病性是用0-100的数值代表其严重程度。请你帮实验室完成这些病毒信息的处理,即按传染性升序排序,若传染性相同则按致病性降序排序。
输入格式:
多组输入。每组先输入一个正整数n(1<=n && n <= 100),代表有n种病毒,接下来分别输入每种病毒的信息,即编号number(1000-9999)、传染性Pi(0-100)、致病性Di(0-100)。
提示:以条件 scanf("%d",&n)!=EOF 来确定是否结束多组数据的输入。
输出格式:
对于每组数据输出n行,每行三个数值,空格分隔开,分别是number、Pi、Di。
输入样例:
3
1001 10 30
1006 5 60
2001 30 12
4
1001 10 30
1006 5 20
2001 30 12
1008 5 60
输出样例:
result:
1006 5 60
1001 10 30
2001 30 12
result:
1008 5 60
1006 5 20
1001 10 30
2001 30 12
#include <stdio.h>
#include <stdlib.h>typedef struct {int number;int Pi;int Di;
} Virus;int cmp(const void *a, const void *b)
{Virus *v1 = (Virus *)a;Virus *v2 = (Virus *)b;if (v1->Pi != v2->Pi) {return v1->Pi - v2->Pi;} else {return v2->Di - v1->Di;}
}int main()
{int n;while (scanf("%d", &n) != EOF) {Virus *viruses = (Virus *)malloc(n * sizeof(Virus));for (int i = 0; i < n; i++) {scanf("%d %d %d", &viruses[i].number, &viruses[i].Pi, &viruses[i].Di);}qsort(viruses, n, sizeof(Virus), cmp);printf("result:\n");for (int i = 0; i < n; i++) {printf("%d %d %d\n", viruses[i].number, viruses[i].Pi, viruses[i].Di);}free(viruses);}return 0;
}