[蓝桥杯]高斯日记(Python实现)

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如: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)
 


你可能感兴趣的:(algorithm)