高斯日記(藍橋杯)
阿新 • • 發佈:2021-01-07
技術標籤:algorithm
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢?
高斯出生於:1777年4月30日。
在高斯發現的一個重要定理的日記上標註著:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上標著:8113
請你算出高斯獲得博士學位的年月日
year = int(input('請輸入年份:'))
month = int(input('請輸入月份:'))
day = int(input('請輸入日期:'))
x = int(input('請輸入想要計算的天數:'))
while x >= 365 :
if year % 4 ==0 or year%400 == 0 :
x -= 366
else:
x -= 365
year += 1
for b in range (month+1,13):
if b in [1,3,5,7,8,10,12]:
x -= 31
day = 31
elif b in [ 4,6,9,11]:
x -= 30
day = 30
month = b
if x >= 28 :
continue
else:
month += 1
day = x-1
break
print(year,month,day)
直接暴力解法……
平年是不能夠被4或者400整除,然而閏年可以
平年的二月有28天 全年365天
閏年的二月有29天 全年366天
先通過判斷平年,閏年來快速減少天數,當天數連最少的平年(365)天都不夠的時候停止whil迴圈
然後計算月份和日子,方法就也還是迴圈。注意每個月份的天數,因為這個是從四月開始往上加就不需要考慮二月份的特殊情況了。 最後一個if語句是來判斷剩餘的天數是否還夠一個月,如果夠繼續回到for迴圈 如果不夠跳出。
如果不是當前題目從四月開始,而是從1月份的就需要對二月進行平年閏年的判斷
year = int(input('請輸入年份:'))
month = int(input('請輸入月份:'))
day = int(input('請輸入日期:'))
x = int(input('請輸入想要計算的天數:'))
while x >= 365 :
if year % 4 ==0 or year%400 == 0 :
x -= 366
else:
x -= 365
year += 1
for b in range (month+1,13):
if b in [1,3,5,7,8,10,12]:
x -= 31
day = 31
elif b in [4,6,9,11]:
x -= 30
day = 30
elif b == 2 :
if year % 4 ==0 or year%400 == 0 :
x -= 29
day = 29
else:
x -= 28
day = 28
month = b
if x >= 28 :
continue
else:
month += 1
day = x-1
break
print(year,month,day)