当前位置:   article > 正文

第十二届蓝桥杯国赛完全日期(日期api)_python求从 2001 年 1 月 1 日至 2021 年 12 月 31 日中,一共有多少个完

python求从 2001 年 1 月 1 日至 2021 年 12 月 31 日中,一共有多少个完全日期?

1. 问题描述:

如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。例如: 2021 年 6 月 5 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 16,而16 是一个完全平方数,它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。例如: 2021 年 6 月 23 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 2 + 3 = 16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。
请问,从 2001 年 1 月 1 日到 2021 年 12 月 31 日中,一共有多少个完全日期?

2. 思路分析:

分析题目可以知道我们模拟整个过程即可,在2001年1月1日到2021年12月31日之间计算每一天对应的日期是否满足条件即可。因为使用的是python语言所以可以使用python中的datetime模块(使用api一般不会出现日期上的计算错误而且可以快速计算出结果),datetime模块(datetime模块主要涉及到日期和时间的相关操作)中有一个通过date()函数传递起始年月日对应的日期从而获得一个date对象,在date函数传递结束年月日对应的日期获得一个date对象,通过timedelta函数设置两个日期间隔的天数,这样就可以通过累加每一天得到当前的日期,然后计算当前日期是否满足题目要求即可。

3. 代码如下:

答案是977

  1. from datetime import *
  2. import math
  3. # 计算当前的日期是否满足条件
  4. def solve(day: int, month: int, year: int):
  5. res = 0
  6. while day:
  7. res += day % 10
  8. day //= 10
  9. while month:
  10. res += month % 10
  11. month //= 10
  12. while year:
  13. res += year % 10
  14. year //= 10
  15. return int(math.sqrt(res)) * int(math.sqrt(res)) == res
  16. if __name__ == '__main__':
  17. start = date(2001, 1, 1)
  18. end = date(2021, 12, 31)
  19. # 设置日期的间隔天数
  20. days = timedelta(days=1)
  21. res = 0
  22. while start <= end:
  23. d, m, y = start.day, start.month, start.year
  24. if solve(d, m, y):
  25. res += 1
  26. start += days
  27. print(res)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/510994
推荐阅读
相关标签
  

闽ICP备14008679号