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. 正则表达式lastIndex属性浅析

    有这样一段代码: var newDateStr = " 11 13:48:18"; var reg = new RegExp("[0-9]+","g& ...

  2. 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目。

    1.在eclipse的项目上点右键,刷新项目.2.在项目上点右键,进入属性(properties)3.在左侧列表项目中点击选择“Project Facets”,在右侧选择“Dynamic Web Mo ...

  3. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

  4. Web设计者和开发者必备的28个Chrome插件

    摘要 对于许多Web设计者和开发者来说,Firefox浏览器是无法超越的,对于其他人Chrome正在蚕食Firefox的浏览器市场. 在过去的两年,谷歌Chrome浏览器的发布以来,引起了人们激烈争论 ...

  5. Interview with BOA

    1. BFS 2. QuickSort 3. PCA, 1000 articles, so many factors, how to reduce factors. 4. newton's metho ...

  6. How to Detect and Track Object With OpenCV

    http://www.intorobotics.com/how-to-detect-and-track-object-with-opencv/

  7. java进阶书籍推荐

    第一部分: Java语言篇 1 <Java编程规范>   星级:   适合对象:初级,中级   介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下.对基 ...

  8. jQuery 插件 获取URL参数

    jQuery 获取URL参数的插件 jQuery Url Query String 下载地址:http://plugins.jquery.com/getUrlQueryString.js/   var ...

  9. [QT]抄—影像显示实验

    QtCreator新建一个Qt Application,命名为ImageView 在项目文件夹下添加gdal库,统一放在ImageView\gdal目录下. 右键单击项目,选择添加库命令,添加gdal ...

  10. bootstrap学习之三—插件

    一.模态框(modal)插件 1)为要触发模态框的组件添加data-toggle="modal",data-target="对应ID" 2)使用一个div实现m ...