NOJ南邮上机 开普勒星球历法 PROB1025 Python

PROB1025   开普勒星球历法

描述:

开普勒星的公转周期略长于地球,因此,开普勒星人将一个开普勒年分为 426 天。其中,前十二个月和地球完全一致,13 月和 14 月则分别为 30 和 31 天。

  • 1月 31天
  • 2月 28天(闰年29天)
  • 3月 31天
  • 4月 30天
  • 5月 31天
  • 6月 30天
  • 7月 31天
  • 8月 31天
  • 9月 30天
  • 10月 31天
  • 11月 30天
  • 12月 31天
  • 13月 30天
  • 14月 31天

每过几个开普勒年,就会有一个闰年,闰年的 2 月有 29 天。具体来说,如果一个开普勒年:

  • 是整百年:要被 400 整除才是闰年,否则不是闰年;
  • 是非整百年:只要被 4 整除就是闰年,否则不是闰年。

例如,1900 年是平年,2000 年是闰年,2020 年是闰年,2023 年是平年。

现在,开普勒星人想知道,从开普勒星今年的第一天开始,第 n 天是几月几日。

输入:

输入共一行,包含两个整数 Y 和 n,分别表示今年的年份和需要计算的跨越天数,题目保证 1234≤Y≤9999,1≤n≤426。

输出:

输出共一行,包含两个整数,分别表示第 n 天是几月几日。

样例输入:

2023 1

样例输出: 

1 1

样例输入:

2024 426

样例输出: 

14 30

样例输入:

2000 60

样例输出: 

2 29

 基于python实现的代码:

def is_leap_year(year):
    if year % 100 == 0:
        return year % 400 == 0
    return year % 4 == 0
def kepler_calendar(year, n):
    days_in_month = [31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31]
    month = 1
    while n > days_in_month[month - 1]:
        n -= days_in_month[month - 1]
        month += 1
    return month, n
Y, n = map(int, input().split())
month, day = kepler_calendar(Y, n)
print(month, day)

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾凡a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值