首页 > 试题广场 >

人口普查(20)

[编程题]人口普查(20)
  • 热度指数:21584 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。



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

岁的生日和未出生的生日都是不合理的,应该被过滤掉。

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


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

输入

5<br/>John 2001/05/12<br/>Tom 1814/09/06<br/>Ann 2121/01/30<br/>James 1814/09/05<br/>Steve 1967/11/20

输出

3 Tom John
beg = "1814/09/06"
ed = "2014/09/06"
old_name = ""
young_name = ""
old_bir = ed
young_bir = beg
n = int(input())
cnt = 0
for i in range(n):
    _name, _bir = input().split()
    if beg <= _bir <= ed:
       cnt += 1
       if _bir > young_bir:
           young_name = _name
           young_bir = _bir
       if _bir < old_bir:
           old_name = _name
           old_bir = _bir
print(cnt, end="")
if old_name != "":
    print("", old_name, end="")
if young_name != "":
    print("", young_name)

发表于 2021-01-13 16:02:54 回复(0)
  1. pop=int(input())
    low,up=18140906,20140906
    eldest_name,youngest_name='',''
    eldest_age,youngest_age=up,low
    count=0
    for i in range(pop):
        name,birth=map(str,input().split())
        birth=int(''.join(birth.split('/')))
        if birth>up&nbs***bsp;birth<low:
            continue
        else:
            count+=1
            if birth<eldest_age:
                eldest_name=name
                eldest_age=birth
            if birth>youngest_age:
                youngest_name=name
                youngest_age=birth
    print(str(count)+' '+eldest_name+' '+youngest_name)

编辑于 2020-01-09 20:11:20 回复(0)
N = eval(input())
L = [input().split() for i in range(N)]
L = [i for i in L if i[1] <= '2014/09/06' and i[1] >= '1814/09/06']
print(len(L), min(L,key = lambda i: i[1])[0], max(L,key = lambda i: i[1])[0])

发表于 2019-08-29 11:58:11 回复(0)
'''Python暴力求解了,datetime超时没办法'''
num = int(input())
name,messages= [],[]
for i in range(num):
    message = input().split()
    infro = message[1].split('/')
    infros = int(infro[0])*360 + int(infro[1])*30 + int(infro[2])#日期变天
    if 653315 < infros < 725316:#哈哈哈,手动计算的上下限度
        messages.append(infro)
        name.append(message[0])
Maxday = max(messages)
Minday = min(messages)
print(len(name),name[messages.index(Minday)],name[messages.index(Maxday)])

发表于 2019-08-11 21:24:45 回复(0)

使用datetime做会超时,不妨转化为数字比较

# -*- coding : utf-8 -*-


def method():
    n = int(input())
    count = 0
    high = 20140906
    low = 18140906
    odd = high
    young = low
    young_name = ''
    odd_name = ''
    for i in range(n):
        name, time_str = input().split()
        year, month, day = map(int, time_str.split('/'))
        num = year * 10000 + month * 100 + day
        if low <= num <= high:
            count += 1
            if num <= odd:
                odd = num
                odd_name = name
            if num >= young:
                young = num
                young_name = name
    print(count, odd_name, young_name)


if __name__ == '__main__':
    method()
发表于 2019-05-29 23:24:08 回复(0)
number = input()
old,young,people = 20150000,0,0
oldname,youngname = '',''
for i in range(int(number)):
    name,age = map(str,input().split())
    agenumber = int(''.join(age.split('/')))
    if 18140906 <= agenumber <= 20140906:
        if agenumber < old:
            old = agenumber
            oldname = name
        if agenumber > young:
            young = agenumber
            youngname = name
        people += 1
print(people,oldname,youngname)

发表于 2019-03-08 10:37:24 回复(1)
#在输入的过程中进行查找,不用保存下来。节省空间
try:
    while True:
        num = int(input())
        pastDays = '1814/09/06'    #初始化最早的出生日期
        nowDays = '2014/09/06'     #最晚的生日
        young = '1814/09/06'       #初始化年轻人的生日为最老
        elder = '2014/09/06'       #初始化老年人的生日为最年轻
        legal = 0
        for i in range(num):       #输入中比较
            temp = input().split() 
            if pastDays <= temp[1] <= nowDays:
                legal += 1
                if temp[1] > young:
                    youngName = temp[0]
                    young = temp[1]
                if temp[1] < elder:
                    elder = temp[1]
                    elderName = temp[0]
        print("%d %s %s" % (legal,elderName,youngName))
except Exception:
    pass

编辑于 2018-09-21 18:18:32 回复(0)

问题信息

难度:
7条回答 17659浏览

热门推荐

通过挑战的用户

人口普查(20)