1. 问题描述:

整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几)

来源:http://oj.ecustacm.cn/problem.php?id=1360

2. 思路分析:

与日期相关的问题,例如计算两个日期间隔有多少天,有多少个星期几的问题我们都是可以模拟翻日历的方法解决的,模拟翻日历的过程还是比较快速与准确计算两个日期间隔相关日期信息的,都是固定的套路。首先需要声明四个变量分别表示年/月/日/星期(查阅电脑上的日历可知1901/1/1是周二,初始化四个变量对应的值),其中1-6表示星期一道星期六,0表示星期天,在循环中模拟这个过程,循环一开始的时候先判断是否满足某个条件,因为这道问题是计算星期一的个数,所以一开始的时候判断当前的星期是否是1如果是1那么计数加1,判断是否到达了截止日期如果还没到那么继续循环,然后更新当前的日期和天数,判断更新之后的天数是否超出了当前月份的天数,这个时候就涉及到是否是闰年的判断了,可以使用两个方法结合返回当前月份的天数(一个方法计算判断当前的年份是否是闰年,一个方法方法返回当前月份的天数,可以声明一个二维列表来表示平年与闰年对应月份的天数这样可以直接返回具体月份的天数),如果当前更新的天数大于了当前月份的天数说明需要翻到下一个月,天数更新为1,月份加1,最后判断当前月份是否是13来更新月份与年份,因为使用的是python语言所以可以通过print输出语句将当前日期写入到文件中并且通过查阅电脑的上的日历验证是否存在逻辑上的错误,整个过程还是挺好理解的。最终的答案是5217

3. 代码如下:

from typing import List# 判断是否是闰年
def isLeap(year: int):return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)# 计算当前月份的天数
def days(year: int, month: int, months: List[List[int]]):return months[isLeap(year)][month - 1]if __name__ == '__main__':# 使用0表示周日, 通过电脑上的日历查询到1901年1月1日是星期二year, month, day, week = 1901, 1, 1, 2res = 0# 以写的方式打开一个txt文件file = open("D://out.txt", "w")# 二维列表表示平年与闰年对应月份的天数months = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]]while True:if week == 1:res += 1# 使用format语句格式化字符串, 并将格式化之后的结果写入到文件中print("{}年{}月{}日是星期{}".format(year, month, day, week), file=file)if year == 2000 and month == 12 and day == 31:print(res)breakday += 1week = (week + 1) % 7if day > days(year, month, months):day = 1month += 1if month == 13:month = 1year += 1

蓝桥杯星期一(翻日历)相关推荐

  1. 蓝桥杯:翻硬币(贪心)

    历届试题 翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反 ...

  2. 第九届蓝桥杯——星期一

    [问题描述] 整个20世纪(1901年1月1日 至 2000年12月31日 之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几) [答案提交] 注意:需要提交的只是一个整数,不要填写任何多 ...

  3. 蓝桥杯:外星日历————Python

    题目 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历. 日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念,只不过他们的一个星期包 ...

  4. 大数开根号(蓝桥杯-矩阵翻硬币)

    在蓝桥上面交了个题目,测试了java和C++的速度发现差距还是蛮大的,java代码相对比较少但是时间和内存差不多就是十倍的差距了. 上C++版本代码: #include <cstring> ...

  5. 蓝桥杯--矩阵翻硬币

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB      问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行 ...

  6. Java实现第九届蓝桥杯星期一

    星期一 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几) 注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字. 解: ...

  7. Java实现第八届蓝桥杯外星日历

    外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念, 只不过他 ...

  8. 蓝桥杯试题:矩阵翻硬币

    矩阵翻硬币 这是蓝桥杯的一道练习题,题目如下: 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所 ...

  9. 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...

最新文章

  1. css元素捕捉,css元素选择器
  2. license 验证服务器唯一机器码_代码审计工具Fortify 17.10及Mac平台license版本
  3. ITK:在图像上叠加标签图
  4. golang 引用相对路径package
  5. (水题)洛谷 - P1603 - 斯诺登的密码
  6. rabbitMQ linux 安装步骤
  7. Java实现Oracle数据库备份
  8. 霍尼韦尔从纽交所转板至纳斯达克上市;全球电竞赛事WSL发布首项赛事计划 | 美通企业日报...
  9. Latex添加矢量图/将visio画图转换成矢量图
  10. 小学奥林匹克计算机怎么学,小学奥林匹克数学教程1--6年级全套
  11. jQ UI 后台管理系统基础UI
  12. C语言期末试卷华师,2020华中师大计算机考研经验帖(已上岸)
  13. 智能开关双控实现方法(附电路图)
  14. Systemverilog中@和wait区别
  15. Libre密聊——致力于私密聊天的用心APP
  16. HBase表管理系统
  17. 香侬专栏 | 独家对话斯坦福大学计算机系教授Percy Liang
  18. matlab 资料分享
  19. 麒麟开源堡垒主机在等保上的合规性分析
  20. 两款截然不同的摩托车游戏

热门文章

  1. linux内存管理笔记(十一)---CMA
  2. c语言迷宫问题程序流程图,c语言程序设计 迷宫问题
  3. 计算机的许可服务在哪里打开,Win10服务在哪里,怎么打开Win10服务列表?
  4. python根据日期生成动态密码
  5. 干货集中营(分享)-每日分享妹子图和技术干货
  6. ie网站无法找到服务器,IE中无法找到已经安装的个人证书
  7. 大事发生,程序员一直在守护世界
  8. 伪原创文章技巧(如何提高伪原创文章的原创度)
  9. JavaWeb全套教程笔记_前端技术
  10. android studio 制作.9 图片