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

时间:2024-11-21 08:08:08

题目描述

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 个数字。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  4. int main(){
  5. int n,m,num=0,mi=INT_MAX;
  6. char a;
  7. cin>>n>>a>>m;
  8. if(n==0){//特判注意00-00和00-31的测试点
  9. num++;
  10. n=1;
  11. }
  12. if(m==0){
  13. num++;
  14. m=1;
  15. }
  16. if(n>12){
  17. if(n%10<=2){
  18. if(month[10+n%10]>=m){
  19. cout<<1;
  20. return 0;
  21. }
  22. }
  23. if(n%10!=0){
  24. num++;
  25. if(month[n%10]<m){
  26. num++;
  27. }
  28. cout<<num;
  29. return 0;
  30. }else if(n/10>=2){
  31. num+=2;
  32. if(month[n%10]<m){
  33. num++;
  34. }
  35. cout<<num;
  36. return 0;
  37. }
  38. }
  39. if(month[n]<m){
  40. num++;
  41. }
  42. cout<<num;
  43. return 0;
  44. }