18:Tomorrow never knows?
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你a day in the life,真的会是tomorrow never knows?相信学了计概之后这个不会是难题,现在就来实现吧。
读入一个格式为yyyy-mm-dd的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于1600-01-01,也不晚于2999-12-30。
- 输入
- 输入仅一行,格式为yyyy-mm-dd的日期。
- 输出
- 输出也仅一行,格式为yyyy-mm-dd的日期
- 样例输入
-
2010-07-05
- 样例输出
-
2010-07-06
- 提示
- 闰年的标准:
(1)普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
地球公转示意图
(2)世纪年能被400整除的是闰年。(如2000年是闰年,1100年不是闰年)
输入语句scanf("%d-%d-%d",&y,&m,&d)可以存储年,月,日.输出语句格式类似printf("%d-%02d-%02d ",year,month,day).
- #--------------------------------------------------------------------------------#
- 其他的都不用说,但是……坑啊啊啊!!!!!!!!
- 它没有说保证输入数据无误!
- 也就是说,输入数据会有类似于“2016-3-35”“2016-1-0”“2016-13-1”等等,比如说第一个数据,应该输出“2016-04-01”,第二个应该是“2016-01-01”,第三组数据应该是没有的,因为我的AC代码测第三组输出“2016-13-01”……
- 然后就几个if完事。
- 当然我的代码很长,可以用数组的方式简化一下(应该可以控制在20行左右,甚至缩短到10行):
#include<cstdio> int main() { int y,m,d; scanf("%d-%d-%d",&y,&m,&d); int f=1; if(m==1||m==3||m==5||m==7||m==8||m==10) { if(d>=31) { d=1; m++; f=0;//f的作用就是在判断了一种就不用再判断了,因为这个if中最大月份只有10,++之后也只有11,即不用再判断月份是否大于12 } else d++; } if(m==12&&f) { if(d>=31) { m=1; y++; d=1; } else d++; } if(m==2&&f) { if((y%4==0&&y%100!=0)||y%400==0) { if(d>=29) { d=1; m++; } else d++; } else { if(d>=28) { d=1; m++; } else d++; } } if((m==4||m==6||m==9||m==11)&&f) { if(d>=30) { d=1; m++; } else d++; } printf("%d-%02d-%02d",y,m,d); }
其他的也没什么好说的,我wrong了6次……- By WZY