洛谷P5690 [CSP-S2019 江西] 日期 题解

Alice写下一个可能不存在的日期MM-DD,Bob需要更改最少数字使其合法。2月固定为28天。输入一个5字符的字符串表示日期,输出需更改的位数。例如,将02-31改为02-28,需要更改1位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

Alice在纸上写下了一个日期,形式为 MM-DD,其中MM 与 DD都是两位数字,分别表示月和天,然而这个日期并不一定存在。 Alice找来了Bob要他更改若干位上的数字,使得这个日期存在。请你帮Bob算算他最少需要更改几位数字。

本题中我们认为 2 月固定为 28 天。

输入

仅一行一个五个字符的字符串,表示 MM-DD。

输出

仅一行一个整数,表示答案。

输入输出样例

输入 #1

03-32

输出 #1

1

输入 #2

02-39

输出 #2

1

输入 #3

67-89

输出 #3

2

说明/提示

【输入输出样例1说明】

更改方式不止一种,其中一种方式是改为: 03-22。

【输入输出样例2说明】

一种更改方式为:02-09。

【输入输出样例3说明】

一种更改方式为:07-09。

【数据规模与约定】 对于 100%的数据:MM与 DD一定为 4 个数字。

#include<bits/stdc++.h>
using namespace std;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
    int n,m,num=0,mi=INT_MAX;
    char a;
    cin>>n>>a>>m;
    if(n==0){//特判注意00-00和00-31的测试点
    	num++;
    	n=1;
	}
	if(m==0){
		num++;
        m=1;
	}
    if(n>12){
        if(n%10<=2){
            if(month[10+n%10]>=m){
                cout<<1;
                return 0;
            }
        }
        if(n%10!=0){
            num++;
            if(month[n%10]<m){
                num++;
            }
            cout<<num;
            return 0;
        }else if(n/10>=2){
            num+=2;
            if(month[n%10]<m){
                num++;
            }
            cout<<num;
            return 0;
        }
    }
    if(month[n]<m){
        num++;
    }
    cout<<num;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值