淼姐的生日-数组

淼姐有时候会很糊涂,她常常不知道自己的生日是星期几?请你帮她编写一个程序,只要输入年月日,就能知道那天是星期几。

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]);
}
上一篇:CSUST 2006-Simple Inversions(动态逆序对-分块)


下一篇:JS中date日期初始化的5种方法