Ponytai1 2016-10-02 02:07 采纳率: 25%
浏览 1408

PAT 1028 人口普查,简单题跪求大神指点

这是题目的链接https://www.patest.cn/contests/pat-b-practise/1028
实在不知道究竟错哪儿,边界也考虑进去了啊。很简单的题,本人新手一枚望大神指点错误之处。

#include <stdio.h>
struct People
{
    char name[6];
    int year;
    int month;
    int day;
 } ;
typedef struct People People;
int Compare(People p1,People p2)        //p1与p2相比 (返回1代表老,返回2代表相等,返回0代表小于) 
{                                         
    int ret = 2;
    if(p1.year < p2.year)
    {
        ret = 1;
    }else
    if(p1. year == p2.year)
    {
        if(p1.month < p2.month)
        {
            ret = 1;
        }else
        if(p1.month == p2.month)
        {
            if(p1.day < p2.day)
            {
                ret = 1;
            }else
            if(p1.day == p2.day)
            {
                ret = 2;
            }
        }
    }else
    ret = 0;
    return ret;
}
int main ()
{
    int amount;
    People oldest = {.year = 2014,.month = 9,.day = 6};
    People youngest = {.year = 1814,.month =  9,.day = 6};
    People old = {.year = 1814,.month =  9,.day = 6};         //必须要年轻于或等于这个日期 
    People young = {.year = 2014,.month = 9,.day = 6};       //必须老于或等于这个日期 
    People input[100000];
    int cnt = 0;
    scanf("%d",&amount);
    int i;
    for(i = 0;i < amount;i++)
    {
        scanf("%s",&input[i].name);        //思考对空格的处理 
        scanf("%d/%d/%d",&input[i].year,&input[i].month,&input[i].day);
    }
    for(i = 0;i < amount;i++)
    {
        if((Compare(input[i],young) == 1 || Compare(input[i],young) == 2)&&(Compare(input[i],old) == 0 || Compare(input[i],old) == 2))      //大于等于1814 9 6 小于等于 2014 9 6 
        {
            cnt++;
            if(Compare(input[i],youngest) == 0 || Compare(input[i],youngest) == 2)       //年轻于或等于最年轻的,则替换最年的数据 
            {
                youngest = input[i];
            }
            if(Compare(input[i],oldest) == 1 ||Compare(input[i],oldest) == 2)          //老于或等于最年长的,则替换最年长的数据 
            {
                oldest = input[i];
            }

        }
    }
    if(cnt != 0)
    {
        printf("%d ",cnt);
        printf("%s ",oldest.name);
        printf("%s",youngest.name);
    }else
    if(cnt == 0)
    {
        printf("0");
    }
    return 0;



}
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-10-02 04:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序