日期

日期

这道题比较水,但还是十分值得深思的,有点像数学里的分类讨论问题。

  • 日期为 \(31\)

    • 月份为 \(1,3,5,7,8,10,12\) 无需修改。

    • 月份为 \(2,4,6,9,11\)\(1\) 次(都改成 \(1\) 月)。

    • 除掉以上合法的月份,当个位为 \(4,6,9\) 时,修改十位不能达到目的。

    • 其他情况均可以 \(1\) 次成功,如果各位为 \(0,2\),改成 \(10\) 月;否则将其十位改成 \(0\)

  • 日期为 \(29,30\)

    • 如果是 \(2\) 月或者是其他不合法的月份,修改一次;\(2\) 月改 \(1\) 月;个位为 \(0,2\) 改十位为 \(10,12\)。其他情况直接改十位为 \(0\)
    • 否则,无需修改。
  • 日期为 \(1\sim 28\)

    • 月份合法无需修改
    • 月份不合法修改,同 \(29,30\) 第一点的改法。
  • 日期不合法

    • 个位为 \(0\) 改为 \(10\),否则改成个位的数。
    • 如果月份不合法,修改一次,同 \(29,30\) 第一点的改法。

综上,所有情况都已分析完,时间复杂度 \(O(1)\)

#include<bits/stdc++.h>
using namespace std;
int m,d;
int main(){
    scanf("%d-%d",&m,&d);
    if(d==31){
        if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)puts("0");
        else if(m==2||m==4||m==6||m==9||m==11)puts("1");
        else if(m%10==4||m%10==6||m%10==9)puts("2");
        else puts("1");
    }
    else if(d==29||d==30){
        if(m==2||m==0||m>12)puts("1");
        else puts("0");
    }
    else if(d>0&&d<=28){
        if(m>0&&m<=12)puts("0");
        else puts("1");
    }
    else if(m==0||m>12)puts("2");
    else puts("1");
    return 0;
}
posted @ 2023-05-22 12:48  wscqwq  阅读(3)  评论(0编辑  收藏  举报