题目链接:
http://poj.org/problem?id=2080
Description
Input
Output
Sample Input
1730 1740 1750 1751 -1
Sample Output
2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday
Hint:
题意:
给出一个n,表示天数,让你求出以2000年1月1日 星期六为起点,n天后的具体的时间。
题解:
其实思路蛮简单的,就是慢慢推过去,而且n的范围也不是很大,不用担心会超时的问题,就是输出时的格式需要注意下,自己就被坑了2次 。
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char weekend[][20]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int days_of_year(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
return 366;
else
return 365;
}
int days_of_month(int month,int year)
{
int ans=0;
if(month==2)
return days_of_year(year)==366?29:28;
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
ans=31;
break;
default:
ans=30;
}
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=-1)
{
int week=n%7;
int year=2000;
int month=1;
int day=1;
while(n)
{
if(n>=days_of_year(year))
{
n-=days_of_year(year);
++year;
}
else if(n>=days_of_month(month,year))
{
n-=days_of_month(month,year);
++month;
}
else
{
day+=n;
n=0;
}
}
printf("%d-%02d-%02d %s\n",year,month,day,weekend[week]);
}
}
原文:http://www.cnblogs.com/TAT1122/p/5830071.html