蓝桥杯——星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,
则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。yyyy-mm-dd

int day_num(int year, int month, int day)
{
	bool flag = false;
	if (year % 4 == 0 || (year % 100 == 0 && year % 400 != 0))
		flag = true;

	if (month == 0)
		return day;

	if (month < 7)
	{
		if (month % 2 != 0)
		{
			return 31 + day_num(year, month - 1, day);
		}
		else
		{
			if (month == 2)
			{
				if (flag)
					return 29 + day_num(year, month - 1, day);
				else
					return 28 + day_num(year, month - 1, day);
			}
			else
			{
				return 30 + day_num(year, month - 1, day);
			}
		}
	}
	else if (month >= 7 && month <= 8)
	{
		return 31 + day_num(year, month - 1, day);
	}
	else
	{
		if (month%2==0)
			return 31 + day_num(year, month - 1, day);
		else
			return 30 + day_num(year, month - 1, day);
	}
}

void get_data(int *year, int *month, int *day, int count)
{
	bool flag = false;
	if (*year % 4 == 0 || (*year % 100 == 0 && *year % 400 != 0))
		flag = true;

	for (int i = 0; i < count; i++)
	{
		*day += 1;

		if (*month == 13)
		{
			*year += 1;
			if (*year % 4 == 0 || (*year % 100 == 0 && *year % 400 != 0))
				flag = true;
			else
				flag = false;
			*month = 1;
		}

		if (*month == 4 || *month == 6 || *month == 9 || *month == 11)
		{
			if (*day == 31)
			{
				*month += 1;
				*day = 1;
			}
		}
		else if (*month == 1 || *month == 3 || *month == 5 || *month == 7 || *month == 8 || *month == 10 || *month == 12)
		{
			if (*day == 32)
			{
				*month += 1;
				*day = 1;
			}
		}
		else if (*month == 2)
		{
			if (flag)
			{
				if (*day == 30)
				{
					*month += 1;
					*day = 1;
				}
			}
			else
			{
				if (*day == 29)
				{
					*month += 1;
					*day = 1;
				}
			}
		}
	}
}

int main(void)
{
	clock_t start, finish;
	double totaltime;

	start = clock();

	int year = 2014;
	int month = 11;
	int day = 9;
	get_data(&year, &month, &day, 1000);
	printf("%d--%d--%d\n", year,month,day);

	finish = clock();
	totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
	printf("%lf", totaltime);
}

答案:2017–8--5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值