标签:
题目链接:
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