华为2020.05.13笔试题:01.判断日期是周几

题目:1980 01 02 周五,求1980 01 04周几

描述:给一个日期,并告诉你是周几;
然后再给你一个日期,请你判断这是周几。

#题目:1980 01 02 周五,求1980 01 04周几


# 随机输入日期,计算出星期几
print("2080年1月2号是星期二,作为参考日期")
year = int(input("请输入要查询的年份:"))
mon = int(input("请输入要查询的月份:"))
day = int(input("请输入要查询的天:"))

list1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 闰年2月份为29天
list2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 平年2月份为28天
date = 0
years = 0

# 输入的年份大于等于2018年的判断过程如下:    day( 年 + 月 + 日 )% 7
if year >= 1980:
    #计算出相差年份的天数
    for j in range(1980, year): #注意若range(a,b)中a=b时,循环不执行
        if (j % 4 == 0) & (j % 100 != 0) or j % 400 == 0: # 判断闰年:被4整除但不被100整除,或被400整除
            years += 366
        else:  # 平年
            years += 365  # 闰年天数加366天,平年加365天
    #计算月份、日期 相差的天数
    if ((year % 4) == 0) & ((year % 100) != 0) or ((year % 400) == 0):
        for i in range(mon - 1):
            date += list1[i]  # 闰年月份按list1相加,得月份相差天数
        days = date + day - 2     #加上日期差
    else:
        for i in range(mon - 1):
            date += list2[i]  # 平年月份按list2相加,得月份相差天数
        days = date + day - 2    #加上日期差

    total = days + years      #总天数差
    ji = total % 7  # 参考日期是2018年1月1号是星期一

    # 由于"ji=0"时,输出的结果是"星期0",因此对"ji"进行了判断,使"ji=0"时输出的结果为"星期7"
    if ji != 0:
        if (ji+5)%7 != 0:
            print(year, '年', mon, '月', day, '日', '是星期', (ji+5)%7 )
        else:
            print(year, '年', mon, '月', day, '日', '是星期', 7)
    else:
        print(year, '年', mon, '月', day, '日', '是星期', 5)

# 输入的年份小于2018年的判断过程如下:  day( 年 + 月 + 日 )% 7
else:
    for j in range(year + 1, 1980):
        if (j % 4 == 0) & (j % 100 != 0) or j % 400 == 0:
            years += 366
        else:
            years += 365

    if ((year % 4) == 0) & ((year % 100) != 0) or ((year % 400) == 0):
        for i in range(mon - 1, 12):
            date += list1[i]
        days = date - day + 1
    else:
        for i in range(mon - 1, 12):
            date += list2[i]
        days = date - day + 1 + 1

    total = days + years
    ji = total % 7
    if ji != 0:
        # 余数为1是星期7,余数为2是星期6...,总结规律为8-ji
        if 5 - ji > 0:
            print(year, '年', mon, '月', day, '日', '是星期', 5 - ji)
        elif 5 - ji < 0:
            print(year, '年', mon, '月', day, '日', '是星期', 12 - ji)
    else:
        print(year, '年', mon, '月', day, '日', '是星期', 5)

C++ 的方法:https://www.nowcoder.com/discuss/426591?type=post&order=time&pos=&page=1&channel=1001&source_id=search_post

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值