天天看點

淼姐的生日-數組淼姐有時候會很糊塗,她常常不知道自己的生日是星期幾?請你幫她編寫一個程式,隻要輸入年月日,就能知道那天是星期幾。

淼姐有時候會很糊塗,她常常不知道自己的生日是星期幾?請你幫她編寫一個程式,隻要輸入年月日,就能知道那天是星期幾。

Input

輸入一個日期,包括年、月、日。

Output

輸出這個日期是星期幾。

Sample Input

1 1 1

2 1 1

2006 7 10

Sample Output

Monday

Tuesday

Monday

Hint

1、 已知公元1 年1 月1 日是星期一 2、 算法提示:如果輸入的是2006 年3 月12 日,計算方法是 (1) 先計算從公元0001 年初(0001-1-1)到2005 年末(2005-12-31)共多少天,注意其中有閏年,閏年是366 天,平年是365 天。閏年的判斷條件滿足: (( year%40 && year%100!=0 )||(year%4000)) (2) 然後再計算2006 年1 月1 日到2006-3-12 是多少天。注意同樣判斷本年度是否閏年, 即二月份是28 天還是29 天。 (3) 上述兩部分相加即從公元0001 年初(0001-1-1)到2006 年末(2006-3-12)的天數, 用該天數模7(total%7)即得到星期數。

(忽略羅馬教皇事件,若不懂此事件,不用管此括号内提示!)

#include "stdio.h"
int main()
{
    int y, m, d;
    int n = 0, i; //一共有n天
    int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    char b[7][100] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"};
    scanf("%d%d%d", &y, &m, &d);

    for(i = 1; i <= y; i++)
    {
        if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
            n++;//判斷閏年的個數隻要是閏年都會加1,但是沒有判斷是否過2月29号
    }

    if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
    {
        if(m > 2)
            ;
        else if(m == 2 && d == 29)
            ;
        else
            n--;
    }//判斷是否過2月29号

    n = 365 * (y - 1) + n + d; //計算除月份的日子數

    for(i = 1; i < m; i++)
    {
        n += a[i - 1];
    }

    n = n % 7;
    printf("%s", b[n]);
}
           
ACM