天天看點

An problem about date

An problem about date

時間限制: 2000 ms  |  記憶體限制: 65535 KB 難度: 2

描述
acm的iphxer經常忘記某天是星期幾,但是他記那天的具體日期,他希望你能寫個程式幫幫他。
輸入
每行有三個整數 year,month,day,日期在1600年1月1日到9600年1月1日之間;
輸出
輸出對應的星期,用一個整數表示;(星期一到星期六用1-6表示,星期日用0表示)
樣例輸入
2011 3 6
1949 10 1
2011 4 1
1945 8 15      
樣例輸出
0
6
5
3      
泰勒公式      
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]為取整符号)
W是所求日期的星期數. 
 如果求得的數大于7,可以直接對7取餘,不過周日就輸出為0了。 
 如果求得的數小于0,可以加上7的倍數,直到結果大于零小于7為止 
 c是公元年份的前兩位數字, 
 y是已知公元年份的後兩位數字; 
 m是月數, 
 d是日數. 
 方括[ ]表示隻截取該數的整數部分。

所求的月份如果是1月或2月,則應視為前一年的13月或14月. 
 是以公式中m 的取值範圍不是1-12,而是3-14. 
      
#include<stdio.h>
int we(int year,int month,int day)
{
    if(month==1||month==2)
    {
        month+=12;
        year--;
    }
    int c=year/100;
    int y=year%100;
    int m=month;
    int d=day;
    int w=c/4-2*c+y+y/4+26*(m+1)/10+d-1;
    if(w<0)
        return (w+(-w/7+1)*7)%7;
    return w%7;
}
int main()
{
    int year,month,day;
    while(scanf("%d%d%d",&year,&month,&day)!=-1)
    {
        int ha=we(year,month,day);
        printf("%d\n",ha);
    }
}