本算法中引用的是由Tomohiko Sakamoto 提供的简洁函数代码
代码如下:
int dayofweek(int y, int m, int d) /* 0 = Sunday */ { static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; y -= m < 3; return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; }
AC代码如下:
#include <stdio.h> int dayofweek(int y, int m, int d) /* 0 = Sunday */ { static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; y -= m < 3; return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; } const char day[][20] = {"Sunday","Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday"}; const char month[][20] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int main() { char m[20]; int d,y,mon; int i; while(scanf("%d %s %d",&d,m,&y) != EOF) { for(i = 0;i < 12;i++) { if(strcmp(m,month[i]) == 0) { mon = i; break; } } //printf("%d %d %d\n",y,mon + 1,d); printf("%s\n",day[dayofweek(y,mon + 1,d)]); } return 0; }