1028. 人口普查(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

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

输入格式:

输入在第一行给出正整数N,取值在(0, 105];随后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
#include<stdio.h>
#include<stdlib.h> struct PersonNode
{
char name[];
int year;
int month;
int day;
int err_flag; }person[];
int main()
{
int N,min=-,max=-;
int i,err_count=,err_flag=;
scanf("%d",&N);
for ( i= ; i < N; i++)
{
scanf("%s %d/%d/%d",&person[i].name,&person[i].year,&person[i].month,&person[i].day);
person[i].err_flag=;
/*check */
if(person[i].year<=)
{
if(person[i].year<) {person[i].err_flag=;err_count++;}
else
{
if(person[i].month<=)
{
if(person[i].month<) {person[i].err_flag=;err_count++;}
else
{
if(person[i].day<=)
{
if(person[i].day<) {person[i].err_flag=;err_count++;}
}
}
} }
}
/*check */
else
if(person[i].year>=)
{
if(person[i].year>) {person[i].err_flag=;err_count++;}
else
{
if(person[i].month>=)
{
if(person[i].month>) {person[i].err_flag=;err_count++;}
else
{
if(person[i].day>=)
{
if(person[i].day>) {person[i].err_flag=;err_count++;}
}
}
} }
}
if(person[i].err_flag==)
min=max=i; }
for ( i= ; i < N; i++)
{
/*find max*/
if(person[i].err_flag)
break;
if(person[i].year>=person[max].year)
{
if(person[i].year>person[max].year) max=i;
else
{
if(person[i].month>=person[max].month)
{
if(person[i].month>person[max].month) max=i;
else
{
if(person[i].day>=person[max].day)
{
if(person[i].day>person[max].day) max=i;
}
}
} }
}
/*find min*/
if(person[i].year<=person[min].year)
{
if(person[i].year<person[min].year) min=i;
else
{
if(person[i].month<=person[min].month)
{
if(person[i].month<person[min].month) min=i;
else
{
if(person[i].day<=person[min].day)
{
if(person[i].day<person[min].day) min=i;
}
}
} }
} } printf("%d %s %s\n",N-err_count,person[min].name,person[max].name );
}

第一个版本没有完全通过, 而且特别占内存。

这是一个查找问题,我们要做的是计数,跟找出名字, 所以没有必要

把所有的信息存起来。输入一个判读一个即可。

如果是最小或者最大,只需要记录下名字。

 #include<stdio.h>
#include<stdlib.h>
#include<string.h> int BirthdayCmp(int person1year,int person1month,int person1day ,int person2year,int person2month,int person2day );
int IsLeagl(int year,int month,int day);
int main()
{
int N;
int i,err_count=,check=;
char names[],max_names[]=" ",min_names[]=" ";
int year,month,day;
int max_year=,max_month=,max_day=;
int min_year=,min_month=,min_day=;
scanf("%d",&N);
for ( i= ; i < N; i++)
{
scanf("%s %d/%d/%d",names,&year,&month,&day);
/*check */
if( IsLeagl( year,month,day))
{
check++;
if(BirthdayCmp(year,month,day,max_year,max_month,max_day)==)
{
max_year=year;max_month=month;max_day=day;
strcpy(max_names,names);
}
if(BirthdayCmp(year,month,day,min_year,min_month,min_day)==-)
{
min_year=year;min_month=month;min_day=day;
strcpy(min_names,names);
}
} } if(check) printf("%d %s %s\n",check,max_names,min_names );
else printf("");
}
int IsLeagl(int year,int month,int day)
{
if(year<||(year==&&month<)||(year==&&month==&&day<)) return ;
else if(year>||(year==&&month>)||(year==&&month==&&day>)) return ;
else return ;
}
int BirthdayCmp(int person1year,int person1month,int person1day ,int person2year,int person2month,int person2day )
{
if(person1year<person2year||(person1year==person2year&&person1month<person2month)||(person1year==person2year&&person1month==person2month&&person1day<=person2day)) return ;
else if(person1year>person2year||(person1year==person2year&&person1month>person2month)||(person1year==person2year&&person1month==person2month&&person1day>=person2day)) return -;
else return ;
}

PAT乙级 1028. 人口普查(20)的更多相关文章

  1. PAT Basic 1028 人口普查 (20 分)

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

  2. PAT (Basic Level) Practise (中文)-1028. 人口普查(20)

    PAT (Basic Level) Practise (中文)-1028. 人口普查(20)   http://www.patest.cn/contests/pat-b-practise/1028 某 ...

  3. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)

    1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...

  4. PAT-乙级-1028. 人口普查(20)

    1028. 人口普查(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 某城镇进行人口普查,得到了全体居民的 ...

  5. PATB 1028. 人口普查(20)

    1028. 人口普查(20) 注意特判合理人数为0,否则格式错误.很暴力的sort排序找出最大最小. 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Stan ...

  6. PAT(B) 1028 人口普查(C)字符串

    题目链接:1028 人口普查 (20 point(s)) 题目描述 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是 ...

  7. PAT 1028. 人口普查(20)

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

  8. 1028 人口普查 (20 分)C语言

    题目描述 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过200岁的老人,而今天是20 ...

  9. PAT——乙级1028

    这道题花了我半个多小时,对呀乙级算是挺多时间的了. 1028 人口普查 (20 point(s)) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个 ...

随机推荐

  1. php--tp继承公共的控制器

  2. php--group by

    1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by ...

  3. mongoDB 安装配置

    1. 配置文件: 建立配置文件 :mongodb.conf dbpath=D:\mongoDb\data\db #配置数据库目录路径,预先手动创建db目录 logpath=D:\mongoDb\dat ...

  4. 让UITableView 的 headerView跟随 cell一起滚动,tableHeaderView

    在进行UITableView开发的时候,我们有时希望在cell的上面放置一些按钮之类的空间,又想让这些空间跟着cell一起滚动,刚开始想着hederView,注意,这是tableView的sectio ...

  5. ASP.NET MVC 利用ActionFilterAttribute来做权限等

    ActionFilterAttribute是Action过滤类,该属于会在执行一个action之前先执行.而ActionFilterAttribute是 MVC的一个专门处理action过滤的类.基于 ...

  6. Swift-11-委托模式

    委托是一种设计模式,它允许类或者结构体将一些需要它们负责的功能交由(或委托)给其他的类型的实例.委托模式很简单:定义协议来封装那些需要被委托的函数和方法,使其遵循者拥有这些被委托的函数和方法.委托模式 ...

  7. Java学习-002-Java初识

    此文主要讲述什么是 Java,以及 Java 常识性知识,方便亲们进一步了解 Java 语言相关的常识. 一.Java 概述 Java 语言是美国 Sun Microsystems 公司于 1995 ...

  8. MySQL学习笔记——存储引擎的索引特性

  9. python中新式类和经典类的区别

    1).python在类中的定义在py2-3版本上是使用的有新式类和经典类两种情况,在新式类和经典类的定义中最主要的区别是在定义类的时候是否出现引用object;如:经典类:Class 类名::而新式类 ...

  10. Android 百度地图SDK 定位

    引用locSDK_6.1.3.jar,切记添加相应的so文件. 1.定位初始化,需要使用getApplicationContext() mLocClient = new LocationClient( ...