输入第一行包括1个整数N,3<=N<=30,代表输入数据的个数。 接下来的N行有N个职工的信息: 包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。
可能有多组测试数据,对于每组数据, 输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。 关键字顺序:年龄>工号>姓名,从小到大。
5 501 Jack 6 102 Nathon 100 599 Lily 79 923 Lucy 15 814 Mickle 65
501 Jack 6 923 Lucy 15 814 Mickle 65
#include <stdio.h> #include<string.h> typedef struct emp{ int no; char name[100]; int age; } emp; void sort(emp e[],int n){ for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ int temp=strcmp(e[j].name,e[j+1].name); if(temp>0){ emp t=e[j]; e[j]=e[j+1]; e[j+1]=t; } } } for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ int temp=e[j].no-e[j+1].no; if(temp>0){ emp t=e[j]; e[j]=e[j+1]; e[j+1]=t; } } } for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ int temp=e[j].age-e[j+1].age; if(temp>0){ emp t=e[j]; e[j]=e[j+1]; e[j+1]=t; } } } } int main() { int n; scanf("%d ",&n); emp e[n]; int no,age; char a[100]; int len=0; while(scanf("%d %s %d",&no,a,&age)!=EOF){ e[len].age=age; strcpy(e[len].name, a); e[len].no=no; len++; } sort(e,n); int min=n>3?3:n; for(int i=0;i<min;i++){ printf("%d %s %d\n",e[i].no,e[i].name,e[i].age); } return 0; }