1 条题解
-
0
自动搬运
来自洛谷,原作者为

LRY314
……搬运于
2025-08-24 22:13:27,当前版本为作者最后更新于2021-07-21 15:47:11,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我们先看日期,发现日期至多只需要一步就可以改合法,因为不论它是什么数,只要把十位改为 就一定合法。
再看月份,由于日期的合法性受月份影响,我们把判断分为以下几块:
日期 或日期 ,一定不合法,需要一步改日期,月份若合法则答案为 ,否则为 ,因为月份在日期用一步改为小于等于 的数后可以改成 到 中任何数,这至多需要一步。
日期 ,月份为 时合法,答案为 。
如果月份本身合法但日期超了,那么改日期十位即可,答案为 。
月份不合法时,如果月份十位为 ,那么改十位即可;如果月份十位不为 ,个位为 时可将十位改为 ,个位为 时可将十位改为 ,答案为 ;而个位为 时需要额外一步改月份,答案为 。
日期 或日期 ,月份合法 ( 除外)时均不需要修改,答案为 。
而月份为 时,只需改日期为 ,答案为 ;月份不合法时,如果月份个位为 则把月份改为 ,否则就把月份十位改为 ,答案为 。
日期 ,此时若月份合法则不需修改,答案为 ,否则仅用一步即可把月份改合法,答案为 。
综上所述,在合并一些情况后,我们可以得到如下代码:
#include<bits/stdc++.h> using namespace std; int m,d; int main() { //scanf("%d-%d",&m,&d); if(d>0&&d<=28) { if(m>0&&m<=12)cout<<0; else cout<<1; } else if(d==29||d==30) { if(m==2||m==0||m>12)cout<<1; else cout<<0; } else if(d==31) { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)cout<<0; else if(m==2||m==4||m==6||m==9||m==11||m>=13&&m<=19)cout<<1; else if(m%10==4||m%10==6||m%10==9)cout<<2; else cout<<1; } else if(m==0||m>12)cout<<2; else cout<<1; }我大括号喜欢换行别说我(10月6日修改)
(3月20日修改)
- 1
信息
- ID
- 4728
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者