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;
}