CSP -SJX 2019 江西 T1

CSP -SJX 2019 江西 T1 题解

题目:

[CSP-S2019 江西] 日期

题目背景

CSP-SJX2019 T1

题目描述

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

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

输入格式

仅一行一个五个字符的字符串,表示 MM-DD \text{MM-DD} MM-DD

输出格式

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

样例 #1

样例输入 #1

03-32

样例输出 #1

1

样例 #2

样例输入 #2

02-39

样例输出 #2

1

样例 #3

样例输入 #3

67-89

样例输出 #3

2

提示

【输入输出样例1说明】

更改方式不止一种,其中一种方式是改为: 03-22 \text{03-22} 03-22

【输入输出样例2说明】

一种更改方式为: 02-09 \text{02-09} 02-09

【输入输出样例3说明】

一种更改方式为: 07-09 \text{07-09} 07-09

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

首先,第一步是读入

读入两个数字 和 一个’-',用以下代码:
int a1,b1;
cin>>a1;
getchar();//用于读入空格;
cin>>b1;
然后,将 a1 和 b1 的十位和各位分离:
int a=a1/10,b=a1%10;
int x=b1/10,y=b1%10;
注意,小月和大月:
大月:1,3,5,7,8,10,12;
小月:4,5,9;
二月:2;
其次,处理 a=0 且 b=2 (也就是2月)的情况;
if(a==0)
	if(b==2)
		if(x>2)
			cout<<1;
		else if(x==2 && y==9)
			cout<<1;
		else if(x==0 && y==0)
			cout<<1;
		else cout<<0;
处理 a=0 且 b=1,3,5,7,8 (也就是大月)的情况:
else if(b==1 || b==3 || b==5 || b==7 || b==8)
	if(x>3) 
		cout<<1;
	else if(x==3 && y>1)
			cout<<1;
	else if(y!=0 && x!=0 || x==0 && y!=0)
		cout<<0;
	else
		cout<<1; 
处理 a=0 且 b=3,5,9 (也就是小月)的情况:
else if(b==4 || b==5 || b==9)
	if(x>3)
		cout<<1;
	else if(x==3 && y>0)
		cout<<1;
	else if(y!=0 && x!=0 || x==0 && y!=0)
		cout<<0;
	else
		cout<<1; 
处理 a=1 且 b=0,2 (也就是10,11,12月中的大月)的情况:
if(a==1)
	if(b==0 || b==2)
		if(x>3) 
			cout<<1;
		else if(x==3 && y>1)
			cout<<1;
		else if(y!=0 && x!=0 || x==0 && y!=0)
			cout<<0;
		else
			cout<<1; 
处理 a=1 且 b=0,2 (也就是10,11,12月中的大月)的情况:
else if(b==1)
	if(x>3)
		cout<<1;
	else if(x==3 && y>0)
		cout<<1;
	else if(y!=0 && x!=0 || x==0 && y!=0)
		cout<<0;
	else
		cout<<1; 
处理 b>2 的情况:
else if(b>2)
	if(b1<=31 && b1!=0)
		cout<<1;
	else cout<<0;
处理其他情况:
else 
	if((b==0 || b==2) && b1<=31 && b1!=0)
		cout<<1;
	else cout<<2;

最后献上你们最爱的代码(合并情况版本)!

#include<bits/stdc++.h>
using namespace std;
int m,d;
int main()
{
     cin>>m;
	getchar();
     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;
	return 0;
}  

完结!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值