题目描述
在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;
}