在X星系的广袤空间中漂浮着许多X星人造“炸弹”, 用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置, 定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置, 定时为1000天,请你计算它爆炸的准确日期。
以下是我用C语言编写的程序,它的功能是先输入放置的年、月、日,再输入定时的天数,就可以得出爆炸的准确日期。
#include<stdio.h>
void Date(int * yar, int * mth, int * day, int n);
int Days(int yar, int mth);
int main(void)
{
int yar, mth, day, n;
scanf("%d%d%d%d", &yar, &mth, &day, &n);
Date(&yar, &mth, &day, n);
printf("%d %d %d\n", yar, mth, day);
return 0;
}
void Date(int * yar, int * mth, int * day, int n)
{
while (n)
{
while (*mth <= 12 && n)
{
while (*day <= Days(*yar, *mth) && n)
{
(*day)++;
n--;
}
if (n)
{
(*mth)++;
*day = 1;
}
}
if (n)
{
(*yar)++;
*mth = 1;
}
}
return ;
}
int Days(int yar, int mth)
{
if (mth == 4 || mth == 6 || mth == 9 || mth == 11)
{
return 30;
}
else if(mth != 2)
{
return 31;
}
else
{
if ((yar % 400 == 0) || (yar % 4 == 0 && yar % 100 != 0))
{
return 29;
}
else
{
return 28;
}
}
}
贝塔炸弹爆炸的准确日期是2017年8月5日。
Date函数用于计算爆炸的准确日期,Days函数用于返回某年某月的天数(其实这个地方可以改进一下,定义一个变量用来存放Days的返回值,能够节省很多资源,但我为了更直观就不那么做了),合理地调用函数可以让程序更加清晰。
在上面这个程序中,有一点需要注意,(*mth)++和(*yar)++和(*day)++的括号不能去掉。