求星期几问题

普通 hash解法:
#include <stdio.h>
#include<algorithm>
#include<string.h>
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0

char month[13][20]={"","January","February","March","April","May","June","July","August","September","October","November","December"};
char Weekday[7][20]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int dayofMonth[13][2]={0,0,31,31,28,29,31,31,30,30,31,31,30,30,31,31,31,31,30,30,31,31,30,30,31,31};
struct Date{
int Year;
int Mon;
int Day;
void nextDate(){
Day++;
if(Day>dayofMonth[Mon][ISYEAP(Year)]){
    Mon++;
    Day=1;
    if(Mon>12){
      Year++;
      Mon=1;
    }

}
}
};
int buf[3001][13][32];
int main()
{
    struct Date Ori;
    Ori.Year=0;
    Ori.Mon=1;
    Ori.Day=1;
    int cnt=1;
    buf[Ori.Year][Ori.Mon][Ori.Day]=cnt;
    while(Ori.Year<3001){//提前将每个日期对应到同一条数轴上去
        cnt++;
        Ori.nextDate();
        buf[Ori.Year][Ori.Mon][Ori.Day]=cnt;

    }
    
    int d,y,m;
    char s[20];
    while(scanf("%d %s %d",&d,&s,&y)!=EOF){

        for(m=1;m<=12;m++){
            if(strcmp(s,month[m])==0)
               break;
        }
        int days=buf[y][m][d]-buf[2012][7][16];
        days+=1;

    puts(Weekday[(days%7+7)%7]);
    }

    return 0;
}
Zeller公式解法:

#include <stdio.h>
#include<algorithm>
#include<string.h>
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0

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

int main(){
    int y,m,d,w;
    char s[20];
    while(scanf("%d %s %d",&d,&s,&y)!=EOF){
        for(m=1;m<13;m++){
            if(strcmp(s,month[m])==0)
                break;
        }
        int c=y/100;

        if(y<=1582&&m<=10&&d<=4||y<1582){
                y=y%100;
            w=y+y/4+c/4-2*c+13*(m+1)/5+d+2;
        }
        else{
            y=y%100;
            w=y+y/4+c/4-2*c+26*(m+1)/10+d-1;

            w=(w%7+7)%7;
        }

        puts(Weekday[w]);

    }
return 0;
}


猜你喜欢

转载自blog.csdn.net/chunjiekid/article/details/79186250