PAT (Basic Level) Practice (中文)1028. 人口普查(20分)

简介: PAT (Basic Level) Practice (中文)1028. 人口普查(20分)

题目描述


某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。


输入格式


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


输出格式


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


输入样例


5

John 2001/05/12

Tom 1814/09/06

Ann 2121/01/30

James 1814/09/05

Steve 1967/11/20


输出样例


3 Tom John


分析


题目数据可能不合适,所以要设置边界,还要设置一个最小值,和一个最大值,还有一个temp要随时更新最大值和最小值,有一个小注意点,这里的最小值就是最年长的人,这里的最大值就是最年轻得人。

还有一个简单的算法就是在一个有区间的一堆数字之中找到最大值和最小值,可以将max=最小值边界,min=最大值边界,这样子就可以查找了。


代码


//

#include<cstdio>
struct person {
  char name[10];
  int yy,mm,dd;
} oldest,youngest,left,right,temp;
//如果a的日期比b的日期小,返回真 
bool LessEqu(person a,person b)
{
  if(a.yy!=b.yy)
  {
    return a.yy<=b.yy;
  }else if(a.mm!=b.mm)
  {
    return a.mm<=b.mm;
  }else 
  {
    return a.dd<=b.dd;
  }
}
//如果a的日期大于b的日期,返回真 
bool MoreEqu(person a,person b)
{
  if(a.yy!=b.yy)
  {
    return a.yy>=b.yy;
  }else if(a.mm!=b.mm)
  {
    return a.mm>=b.mm;
  }else 
  {
    return a.dd>=b.dd;
  }
}
void init() {
  youngest.yy=left.yy=1814;
  oldest.yy=right.yy=2014;
  youngest.mm=oldest.mm=left.mm=right.mm=9;
  youngest.dd=oldest.dd=left.dd=right.dd=6;
}
int main()
{
  init();
  int n,num=0;
  scanf("%d",&n);
  for(int i=0;i<n;i++)
  {
    scanf("%s %d/%d/%d",temp.name,&temp.yy,&temp.mm,&temp.dd);
    if(MoreEqu(temp,left)&&LessEqu(temp,right)) {
      num++;
      if(LessEqu(temp,oldest)) 
      {
        oldest=temp;
      }
      if(MoreEqu(temp,youngest))
      {
        youngest=temp;
      }
    }
  }
  if(num==0)
  {
    printf("0\n");
  }else 
  {
    printf("%d %s %s\n",num,oldest.name,youngest.name);
  }   
} 

还有一个注意点

struct person {
  char name[10];
  int yy,mm,dd;
} oldest,youngest,left,right,temp;
person a;
oldest.yy=2010;
相关文章
|
C语言 C++
PAT (Basic Level) Practice (中文)1099 性感素数(20分)
“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html) 现给定一个整数,请你判断其是否为一个性感素数。
144 0
|
C语言 C++
PAT (Basic Level) Practice (中文) 1031 查验身份证 (15分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
85 0
|
测试技术
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
107 0
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
|
存储
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
89 0
PAT (Basic Level) Practice (中文) 1041 考试座位号 (15 分)
|
存储 测试技术
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
89 0
PAT (Basic Level) Practice (中文) 1036 跟奥巴马一起编程 (15 分) p89
PAT (Basic Level) Practice (中文) 1036 跟奥巴马一起编程 (15 分) p89
161 0
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
83 0
PAT (Basic Level) Practice (中文) 1016 部分A+B (15 分)
PAT (Basic Level) Practice (中文) 1016 部分A+B (15 分)
88 0
|
C语言
PAT (Basic Level) Practice (中文) B1026 程序运行时间 (15 分)
PAT (Basic Level) Practice (中文) B1026 程序运行时间 (15 分)
122 0
|
编译器
PAT (Basic Level) Practice (中文)- 1077 互评成绩计算(20 分)
PAT (Basic Level) Practice (中文)- 1077 互评成绩计算(20 分)
105 0