zoukankan      html  css  js  c++  java
  • 1028 人口普查

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

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

    输入格式:

    输入在第一行给出正整数 N,取值在(;随后 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

    注意判断当没有满足条件的时候(即sum = 0时), 直接输出0即可
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    struct Per
    {
    	char name[20];
    	int year;
    	int month;
    	int day;
    };
    
    bool cmp(const struct Per *a, const struct Per *b)
    {
    	if(a->year == b->year)
    	{
    		if(a->month == b->month)
    		{
    			return a->day < b->day;
    		}
    		else
    		{
    			return a->month < b->month;
    		}
    	}
    	else
    	{
    		return a->year < b->year;
    	}
    }
    
    bool judge(const struct Per a)
    {
    	if(a.year < 1814)	
    		return false;
    	else if(a.year == 1814 && a.month < 9)
    		return false;
    	else if(a.year == 1814 && a.month == 9 && a.day < 6)
    		return false;
    	else if(a.year > 2014)
    		return false;
    	else if(a.year == 2014 && a.month > 9)
    		return false;
    	else if(a.year == 2014 && a.month == 9 && a.day > 6)
    		return false;
    	else
    		return true;
    }
    
    int main()
    {
    	int n, i = 0, j = 0, sum = 0;
    	cin >> n;
    	
    	Per p[n], *q[n];
    	for(i = 0; i < n; ++ i)
    	{
    		scanf("%s %d/%d/%d", p[i].name, &p[i].year, &p[i].month, &p[i].day);
    	}
    	
    //	for(i = 0; i < n; ++ i)
    //	{
    //		cout << p[i].name << " " << p[i].year << " " << p[i].month << " " << p[i].day << endl; 
    //	}
    //	cout << endl;
    	
    	for(i = 0; i < n; ++ i)
    	{
    		if(judge(p[i]))
    		{
    			q[j ++] = &p[i];
    			sum ++;
    		}
    	}
    	
    	if(sum == 0)
    	{
    		cout << sum;
    	}
    	
    	else
    	{
    		sort(q, q + j, cmp);
    		
    	//	for(i = 0; i < j; ++ i)
    	//	{
    	//		cout << q[i].name << " " << q[i].year << " " << q[i].month << " " << q[i].day << endl;
    	//	}
    		
    		cout << sum << " " << q[0]->name << " " << q[j - 1]->name;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    grant授权“失败”的原因
    解决:error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
    3.MySQL之创建/删除用户
    Linux常用宏contianer_of()
    Linux设备模型(一)_基本概念
    内核探测工具systemtap简介
    模块驱动调试记录 ——platform_driver_register
    Linux软件栈上的性能诊断工具集
    系统调用—sysconf
    C的编译&预编译
  • 原文地址:https://www.cnblogs.com/mjn1/p/10879335.html
Copyright © 2011-2022 走看看