题目大意:
输入一个天数d,计算从2000年1月1日起,“经过”d天后 的日期 和 这一天是星期几。
(题目中并未给出2000年1月1日 是星期几,但从样例可以推算出 ~)
样例如下:
Input:
1730
1740
1750
1751
-1
Sample Output
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday
具体 解题思路 在代码中 详细讲解:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> using namespace std; char date[7][15]= {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"}; int run(int year) // 判断闰年 { if((year%4==0&&year%100!=0)||(year%400==0)) { return 1; } return 0; } int s1[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 不是闰年的年份的每个月的天数 int s2[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年的年份的每个月的天数 int main() { int sum ; while (scanf("%d",&sum)!=EOF) { if(sum == -1) break; int year = 2000; int mon = 1; int ri =1; int m = sum%7 ; int i; int pan = 0; // 变量 p 为 判断 变量 sum ++;// 注意:此处非常重要 ,题目说经过多少天,所以在这里先加 1 !! while (sum) { if(run(year)) { if(sum<=366) { for(i=1; i<=12; i++) { if(sum<=s2[i]) { mon = i; ri = sum; pan =1; printf("%d-%02d-%02d ",year,mon,ri); cout<<date[m]<<endl; // 此处要好好理解 break; } else { sum-=s2[i]; } } } else { year++; sum-=366; } if(pan == 1) break; } else { if(sum<=365) { for(i=1; i<=12; i++) { if(sum<=s1[i]) { mon = i; ri = sum; pan =1; printf("%d-%02d-%02d ",year,mon,ri); cout<<date[m]<<endl; break; } else { sum-=s1[i]; } } } else { year++; sum-=365; } if(pan == 1) break; } } } return 0;