星期几——蓝桥杯(Python解法)

已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?
    注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
  输入只有一行
  YYYY MM DD
输出格式
  输出只有一行
  W
数据规模和约定
  1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
  1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5

Python示例(输入必须为真实存在且和为题目要求相一致的输入,例如1111年11月11日和2011年2月30日就不能作为输入,类似边界条件待补充)

a = &amp;quot;2011 11 11&amp;quot;

def ifRunNian(y1):
    y = int(y1)
    if y >= 1599 and y <= 2999:
        if y%4==0 :
            if y%100==0:
                if y%400==0:
                    return 366
                else:
                    return 365
            else:
                return 366
        else:
            return 365
    else:
        return -1

def month2day(y1, m1):
    m = int(m1)
    yb = ifRunNian(y1)
    if m <= 12 and m >= 1:
        if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
            return 31
        elif m == 4 or m == 6 or m == 9 or m == 11:
            return 30
        elif m == 2:
            if yb == 366:
                return 29
            elif yb == 365:
                return 28
        print(m)

def getDeltaYear(y1):
    y = int(y1)
    deltaYList = []
    if y < 2011 and y <= 2999:
        for i in range(2011-y):
            deltaYList.append(y+i)
    elif y>=2011 and y <= 2999:
        for i in range(y-2011):
            deltaYList.append(2011+i)
    return tuple(deltaYList)

def getDeltaDay(y1, m1, d1):
    deltaAllDay = 0
    y = int(y1)
    m = int(m1)
    d = int(d1)
    deltaMList = []
    dy = getDeltaYear(y1)
    if y < 2011 or (y == 2011 and m < 11) or (y == 2011 and m == 11 and d < 11):
        if dy != ():
            for i in dy:
                if i == dy[0]:
                    for j in range(m, 13):
                        # print(int(j))
                        md =  month2day(i, j)
                        deltaAllDay += md
                    deltaAllDay -= d
                else:
                    deltaAllDay += ifRunNian(i)
            for j in range(1, 11):
                deltaAllDay += month2day(int(i)+1, j)
            deltaAllDay += 11
        else:
            i = 2011
            for j in range(m, 11):
                md = month2day(i, j)
                deltaAllDay += md
            deltaAllDay -= d
            deltaAllDay += 11
        deltaAllDay = -deltaAllDay
    # elif y < 2011 or (y == 2011 and m < 11) or (y == 2011 and m == 11 and d < 11):
    elif y > 2011 or (y == 2011 and m > 11) or (y == 2011 and m == 11 and d > 11):
        if dy != ():
            print(dy)
            for i in dy:
                if i == dy[0]:
                    for j in range(11, 13):
                        deltaAllDay += month2day(i, j)
                    deltaAllDay -= 11
                else:
                    deltaAllDay += ifRunNian(i)
            for j in range(1, m):
                deltaAllDay += month2day(int(i)+1, j)
            deltaAllDay += d
        else:
            i = 2011
            for j in range(11, m):
                md = month2day(i, j)
                deltaAllDay += md
            deltaAllDay -= 11
            deltaAllDay += d

    return deltaAllDay

def day2week(deltaAllDay):
    if deltaAllDay < 0:
        deltaAllDay = - deltaAllDay
        e = 5- deltaAllDay % 7
        print(e)
        while e <= 0:
            e += 7
        while e > 7:
            e -= 7
        print(f'星期{e}')
    else:
        e = 5 + deltaAllDay % 7
        while e <= 0:
            e += 7
        while e > 7:
            e -= 7
        print(f'星期{e}')

print(a)
ymd = a.split(&amp;quot; &amp;quot;)
y, m, d = (ymd[0], ymd[1], ymd[2])
print(f'{y}, {m}, {d}')
# day2week(y, m, d)

k = getDeltaDay(1949, 10, 1)
print(k)
day2week(k)
print(month2day(2012, 2))
全部评论

相关推荐

头像
11-03 16:48
已编辑
百度_高级研发工程师
事实是检验真理的唯一标准。&nbsp;无论我们怎么去说,去讲述,去证明,都抵不过一个offer来得实在,无论我们怎么去复现求职中的摸爬滚打、扒皮抽筋、狼狈不堪,都抵不过你在简历写上大厂的名字(外包不算)。&nbsp;所以在我求职期间,我什么话都不说,什么话都不讲,因为没有意义,虽然我总讲过程才是意义,但只有当你上岸的那一刻,你才有资格回想在水里的挣扎,只有等你出了山,你才知道山的全貌。&nbsp;我为什么一定要离开华为OD,难道它不稳定吗,不能赚钱吗。为了证明自己,那肯定有的。其实更多的是印证我的认知是否真的正确。&nbsp;(给不了解我的人交代一下背景,在下双非一本,gap一年,华为OD外包,摸爬滚打4个月,艰难上岸百度正编)一、...
先锋战士:说得很真诚。鄙视链自古有之,学历,家庭背景,财富,权利。从小有之,小学羡慕那些当班委的,中学羡慕那些学生会的,高中羡慕尖子班拿教学金的,大学羡慕高绩点,毕业了羡慕进大厂的。工作了,又羡慕高职级的,再后来又羡慕别人早早结婚的。我想表达的观点很简单,无论是华为od还是百度,都是经历,没有孰高孰低,为了抵达下一个风景,总会付出更多东西,但不就是人生吗?正如登山,每个阶段的山,都要想办法攀登,在博主的文字中,见到了坚持和积极寻找问题解决办法的心态
学历对求职的影响
点赞 评论 收藏
分享
09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务