1. 程式人生 > 其它 >高斯日記(藍橋杯)

高斯日記(藍橋杯)

技術標籤: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)