1.问题叙述
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
2.解决方案
根据题意可以将解题过程分为以下三步:
1)计算从1990年1月1日开始至指定日期共有多少天。
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除。
3)根据余数判断他是在“打鱼”还是在“晒网”。若余数为1,2,3,则他是在“打鱼”,否则是在“晒网”。
使用的算法为数值计算算法,要利用循环求出指定日期距1990年1月1日的天数,并考虑到循环过程中的闰年情况,闰年二月为29天,平年二月为28天。
判断闰年的方法可以用伪语句描述如下:如果能被4整除并且不能被100整除或者能被400整除,则该年是闰年,否则不是闰年。
3.代码演示
#三天打鱼两天晒网 print("please input 指定日期 包括年,月,日 如:1999 1 31") year,month,day=[int(i) for i in input().split()] #判断是否为闰年,是,返回1;否则返回0 def runYear(year): if (year%4==0 and year%100!=0) or (year%400==0): return 1 else: return 0 def countDay(currentDay): #每月天数数组 perMonth=[0,31,28,31,30,31,30,31,31,30,31,30] totalDay=0 year=1990 while year<currentDay['year']: #求出指定日期之前的每一年的天数之和 if runYear(year)==1: totalDay+=366 else: totalDay+=365 year+=1 #如果为闰年,则二月份为29天 if runYear(currentDay['year'])==1: perMonth[2]+=1 i=0 while i<currentDay['month']: #将本年内的天数累加道totalDay中 totalDay+=perMonth[i] i+=1 totalDay+=currentDay['day'] return totalDay #定义一个日期字典 today={'year':year,'month':month,'day':day} totalDay=countDay(today) print("%d年%d月%d日与1990年1月1日相差 %2d天"%(year,month,day,totalDay)) result=totalDay%5 if result>0 and result<4: print("今天打鱼") else: print("今天晒网")
4.结果展示