码迷,mamicode.com
首页 > 其他好文 > 详细

1028. 人口普查

时间:2015-01-23 13:22:55      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:c++   pat   

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:

在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
typedef struct
{
        int year;
        int month;
        int day;
        }People;
bool Legal (People people);
int Compare (People people1,People people2);

People stan1={2014,9,6};
People stan2={1814,9,6};
int main ()
{
    int num;
    scanf("%d",&num);
    getchar();
    int i,count=0;
    People people,old=stan1,young=stan2;
    char name[N+1],oldname[N+1],youngname[N+1];
    for( i=0;i<num;i++)
    {
         scanf("%s",name);
         scanf("%d/%d/%d",&people.year,&people.month,&people.day);
         if( Legal(people))
         {
             count++;
             if( Compare(people,old)<0)
             {
                 old=people;
                 strcpy(oldname,name);
                 }
             if( Compare(people,young)>0)
             {
                 young=people;
                 strcpy(youngname,name);
                 }
             }
         }//for
    if (count!=0)
    printf("%d %s %s\n",count,oldname,youngname);
    else
    printf("0\n");
    system("pause");
    return 0;
    }
int Compare (People people1,People people2)
{
    if(people1.year>people2.year) return 1;
    else if(people1.year==people2.year)
    {
         if(people1.month>people2.month) return 1;
         else if(people1.month==people2.month)
         {
              if(people1.day>people2.day) return 1;
              else if(people1.day==people2.day) return 0;
              else return -1;
              }
         else return -1;
         }
    else return -1;
    }
bool Legal (People people)
{   
     if(Compare(people,stan1)>0) return false;
     if(Compare(people,stan2)<0) return false;
     return true;
     }

1028. 人口普查

标签:c++   pat   

原文地址:http://blog.csdn.net/lchinam/article/details/43054035

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!