题目:
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。
通过这个题,我感觉自己写的代码还是不够简洁明了,思路不清晰,还是要多看一下别人的想法,会有不一样的收获
先上我自己写的代码,虽然能过,但是我后边自己再看一遍时都看了半天【哭】:
#include<iostream>
using namespace std;
int main()
{
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day,month1;
int sumday;
char c;
cin>>year>>c>>month>>c>>day;
cin>>sumday;
if(year%4==0&&year%100!=0||year%400==0)
a[2]+=1;
if(sumday>365)//超过了1年的情况下直接算出年数
{//eg:1000/365=2.8几,用year加上这两年,再用sumday减去两年的天数
year+=sumday/365;
sumday-=(sumday/365)*365;
}
if((day+sumday)<=a[month])//如果day加上总计时天数还没有超过这个月的天数就可以直接加起来
day+=sumday;
else
{
month1=month;
while(sumday>a[month1])//天数大于当前月的天数前提下
{
if(month==month1)//如果还在当前月
sumday-=a[month]-day+1;//今天不算;减去这一个月剩下的天数
else //不在当前月,直接减去那个月
sumday-=a[month1];
month1++;
if(month1>12)
{
year+=1;
month1=1;
}
}
}
cout<<year<<"-"<<month1<<"-"<<sumday<<endl;//注意更新
}
再康康别人的,简单明了,一看就懂:
#include <stdio.h>
int main()
{
int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 1000;
int year = 2014, month = 11, day = 9;
int i;
for (i = 0; i < days; i++)
{
day++;
if (day > monthDays[month - 1])
{
day = 1;
month++;
if (month > 12)
{
month = 1;
year++;
if(year%4==0&&year%100!=0||year%400==0)
monthDays[1]=29;
else monthDays[1]=28;
}
}
}
printf("%d-%d-%d\n", year, month, day);
getchar();
return 0;
}