问题 E: CONTEST5.星系炸弹(by YAN)

题目描述

在X星系的广袤空间中漂浮着n个X星人造“炸弹”,每个炸弹都可以设定多少天之后爆炸。例如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日,星期五爆炸。

输入

第一行为n值,以后连续n行为炸弹放置日期(格式为 年-月-日)和定时天数(整型)。

输出

输出n行,每行为爆炸的准确日期(格式为 yyyy年mm月dd日 星期几),日期和星期之间用一个空格隔开。请严格按照格式书写,不能出现其它文字或符号。

提示信息:星期的数据集合是【星期日、星期一、星期二、星期三、星期四、星期五、星期六】。1900年1月1日,是星期一。

样例输入

2
1999-9-9 800
2014-11-9 1000

样例输出

2001年11月17日 星期六
2017年08月05日 星期六
#include <stdio.h>
#include <string.h>
int list1[2][13] = {
					{0,31, 28, 31, 30, 31, 30, 31, 31, 30 ,31, 30, 31},
					{0,31, 29, 31, 30, 31, 30, 31, 31, 30 ,31, 30, 31} };
char now[7][11] = {"星期日" , "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

int count(int year, int month, int day)
{
	int  n = 0;
	for (int i = 1990; i < year; i++)
	{
		if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0))
		{
			n += 366;
		}
		else
		{
			n += 365;
		}
	}
	for (int i = 1; i < month; i++)
	{
		if ((i == 1) || (i == 3) || (i == 5)
			|| (i == 7) || (i == 8) || (i == 10))
		{
			n += 31;
		}
		else
		{
			if (i == 2)
			{
				if (((year % 4 == 0) && (year % 100 != 0))
					|| (year % 400 == 0))
				{
					n += 29;
				}
				else
				{
					n += 28;
				}
			}
			else
			{
				n += 30;
			}
		}
	}
	n += day;
	return n;
}
int main(void)
{
	int year, month, day, n;
	int a, cnt;
	scanf("%d", &a);
	while (a--)
	{
		char s[11] = { '\0' };
		scanf("%d-%d-%d %d", &year, &month, &day, &n);
		cnt = count(year, month, day) + n;
		//printf("%d\n", cnt);
		while (n > 0)
		{
			int temp = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
			n--;
			day++;
			if (day > list1[temp][month])
			{
				day = 1;
				month++;
			}
			if (month == 13)
			{
				month = 1;
				year++;
			}
		}
		strcpy(s, now[cnt%7]);
		printf("%d年%02d月%02d日 %s\n", year, month, day, s);
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值