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

日期

解题思路

问题分析

这是一个日期验证和最小修改次数的问题。给定一个格式为MM-DD的日期字符串,需要计算最少修改多少位数字才能使日期有效(月份在1-12之间,天数符合该月的天数限制)。

关键观察

  1. 日期有效性检查:首先检查月份是否在1-12范围内,然后检查天数是否在该月的有效天数内
  2. 修改策略
    • 如果日期已经有效,不需要修改(0次)
    • 如果月份有效但天数无效,只需修改天数(1次)
    • 如果月份无效,可能需要修改月份和天数(2次),但有些特殊情况可能只需要修改1次

特殊情况的处理

原代码尝试处理一些特殊情况:

  • 当月份无效时,检查是否可以通过只修改月份的一位数字使日期有效
  • 考虑月份个位数为0或2的情况(可以改为10月或12月)
  • 考虑天数是否在修改月份后可能有效

代码注释

#include <bits/stdc++.h>
using namespace std;// 每个月的天数(2月固定为28天)
int day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main() {string s;cin >> s; // 输入日期字符串,格式为MM-DD// 提取月份和天数int m = (s[0] - '0') * 10 + (s[1] - '0'); // 前两位字符转换为月份数字int d = (s[3] - '0') * 10 + (s[4] - '0'); // 后两位字符转换为天数数字// 检查日期是否有效bool flag = 1;if (m < 1 || m > 12) flag = 0; // 月份无效if (d < 1 || d > day[m]) flag = 0; // 天数无效if (flag) { cout << 0; return 0; } // 如果日期有效,直接输出0// 需要修改的次数int ans = 2; // 默认需要修改2位(月份和天数都要改)if (m >= 1 && m <= 12) { // 月份有效,只需要修改天数ans = 1; } else {// 月份无效 - 天数不一定有效// 尝试判断是否只需要修改1位(月份)就能使日期有效// 检查月份个位数是否为0或2(可以改为10月或12月)if(m % 10 == 0 || m % 10 == 2) {// 如果天数在有效范围内(1-31),则只需要修改月份if(d <= 31) ans = 1;} else {// 对于其他月份个位数,检查修改后月份的天数限制if(d <= day[m % 10]) ans = 1; // 如果天数在修改后月份的有效范围内}}cout << ans;return 0;
}

算法分析

  1. 基础检查:首先检查日期是否已经有效
  2. 分层处理
    • 月份有效 → 只需修改天数(1次)
    • 月份无效 → 进一步分析:
      • 检查是否可以通过只修改十位数使月份有效
      • 检查天数是否在修改后月份的有效范围内
  3. 特殊情况处理:考虑月份个位数为0或2的情况(可以改为10月或12月)
http://www.hskmm.com/?act=detail&tid=11003

相关文章:

  • 【GAN网络解惑】面向产品的优化:推理裁剪、蒸馏、INT8/FP8 量化,GAN 的真实延迟如何打下来? - 教程
  • 资本与资本主义
  • 202509_NBWS_encoded_csv
  • 滑雪
  • 守序者的尊严
  • 在Ubuntu22.04平台上交叉编译针对Rv1126架构的GCC13.2.0编译器
  • 深度学习(DBBNet重参数化)
  • CAR 细胞疗法:肝癌治疗的曙光与荆棘
  • Java项目案例作业1
  • 配置Spring框架以连接SQL Server数据库
  • 这一辈子大多数日子是无聊的
  • Go 实现验证码识别
  • 跳出 AI 编程的「兔子洞」,4 个实战策略帮你解决90%的死循环
  • 用 PHP 和 Tesseract OCR 识别英文数字验证码
  • 凝望深渊时,深渊也凝望着你(黑洞与摇钱树)
  • 详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中
  • spring项目部署后为什么会生成 logback-spring.xml记录
  • 【解决】Matlab函数体突然不自动缩进了
  • 202509_NBWS_logbool
  • Kubernetes权威指南-深入理解Pod Service
  • 详细介绍:jeecg-boot3.7.0对接钉钉登录(OAuth2.0)
  • C++编程软件 Dev-C++ 安装及使用流程
  • DLL植入漏洞分类与微软安全响应指南
  • 4980:拯救行动
  • java03-wxj
  • 题解:P13969 [VKOSHP 2024] Exchange and Deletion
  • 市场交易反心理特征之二:忽视热点切换的苗头
  • Linux服务器上安装配置GitLab的步骤
  • 贪心算法应用:投资组合再平衡问题详解 - 实践
  • MCP:Trae中集成Playwright 实现网页自动化测试