1.代码实现

#include<iostream>
#include<cstdio>
#include <cstring>


using namespace std;
bool Isleapyear(int y){
    return y%4==0&&y%100!=0||y%400==0;
}
int main(){
    int d,m,y,days=0,time1,time2,week,temp;
    char s[20];
    int datetable[2][13]={    {0,31,28,31,30,31,30,31,31,30,31,30,31},
                            {0,31,29,31,30,31,30,31,31,30,31,30,31}};
    char month[13][15]={ "","January","February","March","April","May","June","July",
                            "August","September","October","November","December"
    };
    char weeks[7][15]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
    };
    while(scanf("%d %s %d",&d,s,&y)){
        for(m=0;m<13;m++){
            if(strcmp(s,month[m])==0) break;    
        }//输入月份转化为数字 
        time1=y*10000+m*100+d;
        time2=20210304;
        if(time1<time2){                        //输入两个一组的时间,并排列大小 
            temp=time2;
            time2=time1;
            time1=temp;
        }
        int d1=time1%100;                            
        int d2=time2%100;       
        int y1=time1/10000;                        
        int y2=time2/10000;
        int m1=time1%10000/100;                
        int m2=time2%10000/100;

        while(y1!=y2||m1!=m2){
            days+=datetable[Isleapyear(y2)][m2];        //假设每月都从1号开始,先算月份相差的日期
            if(++m2>12){
                m2=1;
                y2++;
            }
        }
        days=days+d1-d2+1;                    //月份相差日期加上号数相差为总相差
        if(y*10000+m*100+d<20210304){
            week=(11-days%7)%7+1;
        }else{
            week=(days%7+4)%7-1;
        }
        printf("%s",weeks[week]);
    }
    return 0;
}