问题描述

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

分析

“三天打鱼两天晒网”总共是五天,也就是说五天一个循环,在循环里,头三天这个人在打鱼,后两天这个人在晒网,于是我们只要知道从1990年1月1日起到需要询问的某一天为止过去了多少天,用天数对5取余数,得到的结果分别去对应:0-打鱼、1-打鱼、2-打鱼、3-晒网、4-晒网,就能知道这个人在那一天是“打鱼”还是“晒网”。

于是相应的,题目就转化成从询问某一天距离1990年1月1日过去了多少天。

对于时间的处理,Python自带的模块比如datetime就可以快速完成,所以就本题而言,如果用Python,除去输入输出的代码,也就是一句话的事。

import datetime
act = ["打鱼","打鱼","打鱼","晒网","晒网"]
start = datetime.datetime(1990,1,1)
year,month,day = map(int,input().split())
days = (datetime.datetime(year,month,day) - start).days # 计算过去了多少天
print(f"他在{act[days%5]}")

顺便提一句,dateime是内置模块,模块中有个datetime的类,用于表示某一天(可以精确到秒),还有个timedelta的类,表示两个datetime的距离(时间差)。而这个timedelta有两个属性:days和seconds。使用days就可以直接得出两个日期之间距离多少天,不满24小时的时间会保存在seconds属性里,也就是说seconds并不是指两个日期之间总共距离多少秒,而是减去所有整天后剩下多少秒。

回到题目,显然这一题问的是怎样计算两个日期之间的距离,虽然问哥不提倡重复造轮子,但是如果时间允许,倒是可以拿来做做练习。

让我们来思考一下,计算两个公历日期之间有多少天是什么步骤,

  1. 首先要知道两个日期之间差了多少年;
  2. 其次要看距离不够一年的时间里有哪几个月;
  3. 最后再查看不够一个月的时间里还差多少天。

由于本题的起始日期是一年的头一天,所以第2和第3点等于白给,在不考虑查询的日期是否有误的情况下(比如输入2022年13月32日),难度只在于注意闰年平年、大小月的天数不同。

对于闰年,我们已知判读条件有两个:1、能被400整除;2、能被4整除但不能被100整除,所以可定义一个函数用来判断某一年是否是闰年。然后遍历从1990年开始到输入的年份,如果是闰年就加366天,平年就加365天。

计算完年份差,再继续计算差了哪几个月。因为起始日期是1月,所以输入的月份之前都是要累加天数的范围。比如输入的月份是5,则要加上1、2、3、4,四个月的天数。循环最大到11,因为如果输入的月份是12,我们也无法把它看作整月,而如果输入的月份是1,我们只要加上整年的天数即可,所以12是不用检查的。

最后,我们只要加上不足一个月的天数即可,因为起始日期是1号,所以我们直接用输入的日期减去1,得到天数,然后累加在一起即可。

完整代码如下:

def isLeapYear(y):return True if y%4==0 and y%100!=0 or y%400==0 else Falsemonths = [31,28,31,30,31,30,31,31,30,31,30,31]
act = ["打鱼","打鱼","打鱼","晒网","晒网"]year,month,day = map(int,input().split())days = 0
for y in range(1990, year):days += 366 if isLeapYear(y) else 365
for m in range(1, month): # 此处的month-1是减去起始月份,也就是距离1月有哪几个月if m in [1,3,5,7,8,10]: # 大月days += 31elif m in [4,6,9,11]: # 小月days += 30elif isLeapYear(year): # 闰年的二月days += 29else:days += 28
days += day-1 # 同理,此处day-1也是减去起始天,距离1号有几天print(f"他在{act[days%5]}")

当然,本题还有很多写法,比如先给1到12月定义一个天数的列表或字典,然后在遍历的时候调取等等,思路大同小异,不再赘述。

输出

2022 10 1
他在打鱼
2011 10 2
他在晒网
2011 10 3
他在打鱼

Python趣味算法入门 - 打鱼还是晒网相关推荐

  1. C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息)

    C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中 ...

  2. Python趣味算法入门 - 百钱百鸡

    问题描述 中国古代数学家张邱建在他的<算经>中提出了一个著名的"百钱百鸡问题":一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡.母鸡.小鸡 ...

  3. Python趣味算法入门 - 牛顿迭代法求方程根

    问题描述 编写用牛顿迭代法求方程根的函数.方程为,系数a,b,c,d由主函数输入,求x在1附近的一个实根.求出根后,由主函数输出. 牛顿迭代法的公式:,设迭代到  时结束. 分析 在网上可以找到很多关 ...

  4. 03【C语言 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

    目录 一.指路哦 三.打鱼还是晒网 嘞? 3.1 问题描述 3.2 问题分析 3.3 算法设计 3.4 确定程序框架 3.5 求出指定日期距 1990年1月1日的天数 3.6 完整code 及结果 一 ...

  5. 算法初级_Question3_打鱼还是晒网(java实现)

    这篇文章讲述的是算法初级部分的打鱼还是晒网问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. 问题描 ...

  6. python迭代法求解方程_第一部分:趣味算法入门;第六题牛顿迭代法求一元三次方程的根...

    100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门:第六题SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键 ...

  7. 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题

    /* 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网", 问这个人在以后的某一天中是"打鱼"还是&qu ...

  8. python计算存款_第一部分:趣味算法入门;第七题:最佳存款方案

    这里将告诉您第一部分:趣味算法入门:第七题:最佳存款方案,具体完成步骤:100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门: ...

  9. 【c语言趣味编程100例】打鱼还是晒网

    问题 打鱼还是晒网 编程思路:三天打鱼 两天晒网 实现的思路主要是要求出输入的指定的时间和距离1990 01 01这个时间的天数 我们知道年份有闰年和平年之分 闰年2月份是29天 平年2月份28天 因 ...

最新文章

  1. mysql语句查询今天的数据_mysql查询当天所有数据sql语句
  2. WEB中会话跟踪[转]
  3. SVN 如何提交 SO 库文件
  4. 正则表达式及测试工具
  5. 有关软件测试的证书,软件测试证书有用吗
  6. 从服务器恢复系统,服务器恢复系统
  7. r语言clind函数_R 语言学习笔记 1
  8. Qt Quick实现的疯狂算数游戏
  9. 2020年中国林业有害生物发生及防治面积统计情况,林业有害生物防控措施工作的开展刻不容缓「图」
  10. 介绍PS工具“仿制图章工具”和“图案图章工具”
  11. MFC ListCtrl的cheek框的全选和反选
  12. 云脉文档管理小程序使办公更协同
  13. 随机波动率微笑模型及套利
  14. 高分一号、二号样例数据下载
  15. 怎样批量查询网站是否被搜狗收录?批量查询网站搜狗收录的详细教程
  16. 普元 AppServer 部署时页面提示部署失败,后台报错:Unable to load class org.apache.cxf.ws.policy.AssertionBuilder
  17. 中国小三多,是因为女人缺乏精神上的独立,男人缺乏人格上的体面。
  18. 蔡氏电路混沌同步Multisim实现
  19. 服务器显示中国移动,中国移动服务器地址是什么
  20. C和OpenGL结合生成钻石图形的解决方案

热门文章

  1. 斐波那契数列和青蛙跳台阶问题
  2. 使用java开发MQTT客户端接收消息
  3. [软考考点解析]软件设计师--正规式与正规集
  4. Geoserver 图层数据服务发布(.shp)
  5. onDestroy 延时10s调用
  6. 新辰:90后大学生创业开口笑馒头店火爆全市 卖馒头日赚2000!
  7. 总部在浙江省的几家银行基本数据对比表
  8. 信息化解决看病挂号难便民利民有待提高
  9. CSS 的持续悲剧:2023 年 CSS Day 的思考
  10. 2023.2.16 htmlcss