九度的1043 输入日期,算该日是星期几

我的AC代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int a[2][12] ={0,3,3,6,1,4,6,2,5,0,3,5,
                0,3,4,0,2,5,0,3,6,1,4,6};
char month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
char week[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int main()
{
    int day,year;
    char M[10];
    while(scanf("%d%s%d",&day,M,&year)!=EOF)
    {
        int w,i,m,flag=0;
        if((year%4==0 && year%100!=0) || year%400==0)
        {
            flag=1;
        }
        for(i=0;i<12;i++)
            if(strcmp(M,month[i])==0) m=i;
        w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+a[flag][m]+day)%7;
        printf("%s\n",week[w]);
    }
    return 0;
}

貌似这题只能用这个公式,我用了其他的两个公式,运行都是没有问题的,但就是AC不了不知道为什么,求大神指点

1号WA:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int mt[2][12] = {0,3,3,6,1,4,0,3,5,0,3,5,
                 0,3,4,0,2,5,0,3,6,1,4,6};
char month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
char week[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int main()
{
    int day,year;
    char M[10];
    while(scanf("%d%s%d",&day,M,&year)!=EOF)
    {
        int w,i,y=1,m,flag=0;
        if((year%4==0 && year%100!=0) || year%400==0)
        {
            flag=1;
            y=2;
        }
        for(i=0;i<12;i++)
            if(strcmp(M,month[i])==0) m=i;
        w=(year+year/4+year/400-year/100-y+mt[flag][m]+day)%7;
        printf("%s\n",week[w]);
    }
    return 0;
}

2号WA:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
char week[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int main()
{
    int day,year;
    char M[10];
    while(scanf("%d%s%d",&day,M,&year)!=EOF)
    {
        int w,i,y,c,m;
        y=year%100;
        c=year/100;
        for(i=0;i<12;i++)
            if(strcmp(M,month[i])==0) m=i+1;
        if(m==1||m==2) m+=12;
        w=(y+y/4+c/4-2*c+26*(m+1)/10+day-1)%7;
        printf("%s\n",week[w]);
    }
    return 0;
}