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. yum安装node.js

    1.安装EPEL库 yum install epel-release 2.安装Node.js yum install nodejs 3.安装nodejs中常用的npm软件包管理器 yum instal ...

  2. Javascript实现提示错误的信息直接出现在输入框后

    可以在输入框后加个<span id="error"></span>,当验证错误时这样处理document.getElementById('error').i ...

  3. 【C++】运算符重载

    运算符重载,主要是简化类类型运算,能够让我们对类对象直接用运算符进行运算.基本语法: 类型 operator 运算符(参数列表){ ... } Complex operator+(Complex va ...

  4. LightOj1074 - Extended Traffic(SPFA最短路)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1074 题意:有n个城市,每个城市有一个拥堵值a[i],m条单向路u到v,从u到v所需时 ...

  5. C# serialport

    最近使用C#写串口的程序,实现串口助手的功能,参考文档记录于此. 参考文档 http://blog.csdn.net/geekwangminli/article/details/7851673 htt ...

  6. angularJs:双向数据绑定

    示例1 <!DOCTYPE html> <html ng-app> <head> <meta charset="UTF-8" /> ...

  7. Mybatis的分页插件PageHelper

    Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper  文档地址:http://git.oschina. ...

  8. li有无缩略图样式调取

    <div class="part3list">[field:array runphp='yes']@me = (strpos(@me['litpic'],'defaul ...

  9. bootstrap响应式布局简单实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. 脚本编程中的test、bash调试、变量计算、参数

    脚本编程中的test.bash调试.变量计算.参数 1.文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试路径是否为目录 -r FILE:测试当前 ...