吉大秦少游 2018-10-28 03:42 采纳率: 0%
浏览 1243
已采纳

1028 人口普查最后一个测试点通过不了

 //PAT1028V2
#include <stdio.h>

int main(){
    int n,count=0,i;    //n is the number of input
    scanf("%d",&n);
    struct birth{
        char name[6];
        int year;
        int month;
        int day;
    }a,max,min;
    max.year=2014,max.month=9,max.day=7;
    min.year=1814,min.month=9,min.day=5;

    for(i=0;i<n;i++){
        scanf("%s %d/%d/%d",&a.name,&a.year,&a.month,&a.day);
        count++;
        if((a.year>2014)||(a.year==2014&&a.month>9)||(a.year==2014&&a.month==9&&a.day>6)||(a.year<1814)||(a.year==1814&&a.month<9)||(a.year==1814&&a.month==9&&a.day<6)){
            count--;
            continue;
        }
        if((a.year<max.year)||(a.year==max.year&&a.month<max.month)||(a.year==max.year&&a.month==max.month&&a.day<max.day)){
            max=a;
        }
        if((a.year>min.year)||(a.year==max.year&&a.month>max.month)||(a.year==min.year&&a.month==min.month&&a.day>min.day)){
            min=a;
        }   
    }
    printf("%d",count);
    if(count!=0){
        printf(" %s %s",max.name,min.name);
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • Italink 2018-10-28 04:25
    关注

    看注释.

     #include <stdio.h>
    
    int main() {
        int n, count = 0, i;    //n is the number of input
        scanf("%d", &n);
        struct birth {
            char name[6];
            int year;
            int month;
            int day;
        }a, max, min;
        max.year = 2014, max.month = 10, max.day = 7;
        min.year = 1814, min.month = 8, min.day = 1;
    
        for (i = 0; i<n; i++) {
            scanf("%s %d/%d/%d", &a.name, &a.year, &a.month, &a.day);
            count++;
            if ((a.year>2014) || (a.year == 2014 && a.month>9) || (a.year == 2014 && a.month == 9 && a.day>6) || (a.year<1814) || (a.year == 1814 && a.month<9) || (a.year == 1814 && a.month == 9 && a.day<6)) {
                count--;
                continue;
            }
            if ((a.year<max.year) || (a.year == max.year&&a.month<max.month) || (a.year == max.year&&a.month == max.month&&a.day<max.day)) {
                max = a;
            }
            //下方第二个逻辑判断把min错写成了max,写的时候没注意看吧
            if ((a.year>min.year) || (a.year == min.year&&a.month>min.month) || (a.year == min.year&&a.month == min.month&&a.day>min.day)) {
                min = a;
            }
        }
        printf("%d", count);
        if (count != 0) {
            printf(" %s %s", max.name, min.name);
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?