当前位置: 首页 > news >正文

完全日期(日期枚举问题)--- 数学性质题型

题目:
 

"""
    如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。

    例如: 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日中,一共有多少个完全日期?

"""

一、暴力枚举

import math

def digit_sum(year, month, day):
    # print(type(f"{year}{month:02d}{day:02d}"))  # 类型:str
    return sum(map(int, f"{year}{month:02d}{day:02f}"))

def is_perfect_date(sum):
    return int(math.sqrt(sum)) ** 2 == sum

def count_perfect_dates():
    count = 0

    for year in range(2001, 2022):
        for month in range(1, 13): 
              
            max_day = 31 # 大月
            if month in [4,6,9,11]: # 小月
                max_day = 30                 
            elif month == 2:
                if (year % 4 == 0 and year % 100 !=0) or (year % 400 == 0):
                    max_day = 29
                else:
                    max_day = 28
        
            for day in range(1, max_day + 1):
                if is_perfect_date(digit_sum(year, month, day)):
                    count += 1
    return count

print(count_perfect_dates())


"""
格式 02d 的解释:
0: 指定如果数字的位数不足两位时,前面会用零填充。
2: 指定输出数字的最小宽度是 2 位。
d: 代表输出的是一个 整数(decimal integer)

"""

 

二、Datetime库

import math 
from datetime import date, timedelta

def is_perfact_date(sum):
    return int(math.sqrt(sum)) ** 2 == sum

def digit_num(cur_date): # 传入日期对象
    return sum(map(int, f"{cur_date.year}{cur_date.month}{cur_date.day}"))

def count_perfect_dates():
    start_date = date(2001, 1, 1)
    end_date = date(2021, 12, 31)

    current_date = start_date
    count = 0

    while current_date <= end_date:
        if is_perfact_date(digit_num(current_date)):
            count += 1
        current_date += timedelta(days=1)
    return count

print(count_perfect_dates())

相关文章:

  • Linux系统重置密码
  • Kubernetes中的微服务
  • 报表DSL优化,享元模式优化过程,优化效果怎么样?
  • SpringCloud——Consul服务注册与发现
  • powershell@宝塔面板批量建站脚本@批量设置@批量部署伪静态设置
  • 【AD】5-12 Object元素的隐藏与显示
  • c语言操作符
  • 前端项目中export和import的作用
  • 网安知识点
  • 从Manus到OpenManus:多智能体协作框架如何重构AI生产力?
  • 【Linux内核系列】:深入解析输出以及输入重定向
  • 分布式锁—7.Curator的分布式锁一
  • Java为什么是跨平台的
  • 《深度剖析架构蒸馏与逻辑蒸馏:探寻知识迁移的差异化路径》
  • PCB孔的类型及设计规则
  • 爬虫案例九js逆向爬取CBA中国篮球网
  • 前端知识点---http.createHttp()的理解(arkts)
  • 动态规划中一维与二维DP表的选择:从问题本质到C++实现
  • STM32_GPIO系统外设学习
  • C++学习——栈(一)
  • 网站建设设计技术方案模板/百度公司地址
  • wordpress tags页面/简述如何优化网站的方法
  • ps做的网站模板/百度做广告费用
  • 织梦网站安装/网站软件下载
  • 建设银行网站怎么短信转账/百度app官方正式版
  • 建设网站合同/电商网站订烟平台