第三届蓝桥杯决赛-国庆星期日(计算以7为周期的余数)

1. 问题描述:

1949年的国庆节(10月1日)是星期六。 今年(2012)的国庆节是星期一。那么,从建国到现在,有几次国庆节正好是星期日呢?只要答案,不限手段!可以用windows日历,windows计算器,Excel公式,。。。。。当然,也可以编程!不要求写出具体是哪些年,只要一个数目!千万不要提交源代码!答案不要写在这里,写在“解答.txt”中

2. 思路分析:

这道题目其实有两种做法,第一种做法是通过"翻日历"的方法,实现天数的累加更新当前的日期,判断当前天数是否是否国庆节而且是星期日对满足条件的日期进行计数即可(涉及到的细节会比较多很可能会存出错),第二种做法是使用循环计算相邻两年的国庆距离多少天,这个时候就需要计算当前这一年是平年还是闰年了,如果是平年那么国庆这一天相差365天,如果是闰年那么相差366天,而且一个很重要的一点是如果两个日期相差7天那么这两个日期的星期是一样的,例如下面的20日与27日相差7天那么这两天的星期是一样的,因为7天就为一个周期:

所以我们只需要计算上一年与当前遍历的年份相差的天数,然后对7进行取余,余数是几那么就在上一年的国庆是周几的基础上往后推几天即可,例如上一年国庆是周六,上一年国庆与当前这一年国庆相差365天,365 % 7 = 1,那么这一年国庆的星期就为上一年的周六往后推一天也就是这一年的国庆是周日。综上我们只需要循环遍历年份,计算上一年与当前这一年相差的天数,如果是平年那么为上一年国庆的星期上推后一天,如果为闰年那么为上一年国庆的星期的推后两天即可,(其实就是以7为周期两个日期的星期是不变的,已知当前星期那么计算两个日期相差多少天即可知道下一个日期的星期 ):365 % 7 = 1 366 % 7 = 2,更推荐第二种方法因为细节比较少更容易处理

3. 代码如下:

# 判断是否是闰年
def isLeap(year: int):
    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)


if __name__ == '__main__':
    count = 0
    week = 6
    for i in range(1950, 2013):
        if isLeap(i):
            # 与366 % 7 = 2是一样的
            week += 2
        else:
            # 与365 % 7 = 1是一样的
            week += 1
        # 余数为0那么就为周日
        if week % 7 == 0:
            # print(i)
            count += 1
    print(count)

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值