思路
判断是否符合要求并计数,把符合的结构输入另一个数组,对该数组进行qsort排序,然后输出第一个和最后一个元素里的相关成员
推荐
我觉得这个写的很好(呜呜呜我写了七十几行人家写二十几行就好了,差距好大)
PAT乙级1028. 人口普查(C语言)_对方北方-CSDN博客
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char name[10];
int year,month,date;
}citizen;
int cmp(const void*a,const void*b){
citizen*pa=(citizen*)a;
citizen*pb=(citizen*)b;
int num1=pa->year;
int num2=pb->year;
int num3=pa->month;
int num4=pb->month;
int num5=pa->date;
int num6=pb->date;
if(num1!=num2){
return num1-num2;
}else{
if(num3!=num4){
return num3-num4;
}else{
if(num5!=num6){
return num5-num6;
}
}
}
return 0;
}
int main(){
int N;
scanf("%d",&N);
citizen a[100000],b[100000];
int cnt=0;
int m=0;
for(int i=0;i<N;i++){
scanf("%s %d/%d/%d",a[i].name,&a[i].year,&a[i].month,&a[i].date);
if(a[i].year>1814&&a[i].year<2014){
cnt++;
b[m]=a[i];
m++;
}else if(a[i].year==1814){
if(a[i].month>9){
cnt++;
b[m]=a[i];
m++;
}
if(a[i].month==9&&a[i].date>=6){
cnt++;
b[m]=a[i];
m++;
}
}else if(a[i].year==2014){
if(a[i].month==9&&a[i].date<=6){
cnt++;
b[m]=a[i];
m++;
}
if(a[i].month<9){
cnt++;
b[m]=a[i];
m++;
}
}
}
qsort(b,m,sizeof(citizen),cmp);
if(cnt==0){
printf("0");
}else{
printf("%d %s %s",cnt,b[0].name,b[m-1].name);
}
return 0;
}
|