P5690 题解

· · 题解

题目传送门

思路

这道题是一道分类讨论题。

首先对月的数字进行更改。如果 \text{MM}112 中的一个数字,那么月份不用更改。如果不满足要求,答案需要增加一次更改,然后继续分类讨论。

既然月已经处理好了,对于天来说,如果它为 0 或者它比当前月份的天数大,那么将十位改为 1 可以解决所有关于天的问题,答案需要增加一次更改。

最后输出统计答案的次数即可。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int read(){int x=0;char f=1,ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
const int MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
    int m=read(),d=read(),ans=0;
    if(m>12||m<=0){
        ++ans;
        if(m/10==1||m%10==0)
            m=10;
        else if(m%10==2)
            m=12;
        else m%=10;
    }
    if(d<=0||d>MON[m])
        ++ans;
    printf("%d\n",ans);
    return 0;
}