【hihocoder】#1148 2月29日

题目链接:http://wwew.hihocoder.com/problemset/problem/1148

题目:
给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。

只有闰年有2月29日,满足以下一个条件的年份为闰年:
1. 年份能被4整除但不能被100整除
2. 年份能被400整除

思路:
计算从0~某年闰年个数,直接用 year/400+year/4-year/100
不知道哪儿错了。。好恶心的OJ。。。此题我给的算法是WA。。留着以后改。。
算法:

data = {"January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6, "July": 7, "August": 8,
        "September": 9, "October": 10, "November": 11, "December": 12}
def isLeap(i):
    if ((i % 400 == 0)or(i % 4 == 0 and i % 100 != 0)):
        return True
    else:
        return False

def parse(str):
    res = []
    res.append(int(str.split()[2]))  # year
    res.append(int(data[str.split()[0]]))  # month
    res.append(int(str.split()[1].replace(',',''))) # day
    return res

def cal(s):
    sd = parse(s)
    res=sd[0]/4+sd[0]/400-sd[0]/100
    if(isLeap(sd[0]) and(sd[1]<2) or (sd[1]==2 and sd[2]<29)):
        res-=1
    return res

try:
    t = int(raw_input())
    i=1
    while 1 <=t:
        start = raw_input()
        end = raw_input()
        s1 = cal(start)
        s2 = cal(end)
        res = s2-s1
        startd=parse(start)
        if(isLeap(startd[0])and(startd[1]==2)and(startd[2]==29)):
            res+=1
        print("Case #%d: %d"%(i,res))
        i+=1
except EOFError:
    print('error')

你可能感兴趣的:(ACM)