建议增加一组数据24-31

P5690 [CSP-S2019 江西] 日期

同意
by WYXkk @ 2020-01-11 13:48:42


帮你@[StudyingFather](/user/22030)
by Smile_Cindy @ 2020-02-12 08:54:10


欢迎拿数据来拍板 ```cpp #include <iostream> using namespace std; char m1, m2, c, d1, d2; int month, day, ans; //number[i]对应第i月的最大合法天数 int number[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { cin >> m1 >> m2 >> c >> d1 >> d2; //提取月份和天数 month=(m1-'0')*10+m2-'0'; day=(d1-'0')*10+d2-'0'; //总共三种情况: //1.月合法-天不合法 //2.月不合法-天合法 //3.月不合法-天不合法 //最简单的就是月份合法,天数不合法,则需要修改天数,修改一位即可 if(month<=12 && month>0 && day>number[month]) ans++; //接下来考虑月份不合法,分为天合法和不合法两种 //首先处理月,月份不合法两种情况(月为0,或月大于12),月必须修改,并且只需修改一位即可 if(month==0 || month>12) ans++; //月不合法,天合法只需要修改月,没有讨论的必要了 //下面处理月不合法-天不合法的情况下,天数需要修改的情况 //月为0,只有当天数超过31时才需要修改天数 if(month==0 && day>31) ans++; //月大于12, 因为1,3,5,7,8,10,12每个月所允许的最大天数为31, //所以月份大于12,并且尾数为1,2,3,5,7,8,0的月,均可以转化为1,3,5,7,8,10,12,因此他们所允许的最大天数为31 //当天数超过31时,天数不合法,需要修改天数,只修改一位即可,月份不合法所需的修改次数在前面代码中已经加过 if(month>12 && (m2-'0'==1 || m2-'0'==2 || m2-'0'==3 || m2-'0'==5 || m2-'0'==7 || m2-'0'==8 || m2-'0'==0) && day>31) ans++; //接下来看看那些尾数为4,6,9的,很容易错误地想到他们所允许的最大天数为30 //这里要区分对待,对于14,16,19这样的非法月,均可以修改为10或者12,这样所允许的最大天数就变为31 //对于24,26,29这样的非法月,如果月份只改一位的情况下,只能改为4,6,9,这样所允许的最大天数就是30 //所以这里区分来做判断,当然假如为24-31时,你也可以将24两位都修改,改为12这样,来满足天数的合法性, //但也你天数没改,月份改了两位,殊途同归 if((month==14 || month==16 || month==19) && day>31) ans++; if(month>20 && (m2-'0'==4 || m2-'0'==6 || m2-'0'==9) && day>30) ans++; //前面考虑的都是天数超出允许范围的情况,还有一种特殊就是天数为0,不论月合不合法,天数都需要修改一位 //关于月非法的修改次数前面已经计算过 if(day==0) ans++; cout << ans; return 0; } ```
by asdypeij @ 2020-04-26 19:18:01


|