这个题就是考察蔡勒公式。
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)
注意:
1、 C是年份的前两位数
y是年份的后两位数
m是月份
d是日
2、需要注意的是如果月份是一月二月,则需看成是上一年的13月,14月,所以月份不是1-12,而是3-14。
3、W算出来的数有可能是负数,这是需要将他加上一个较大的7的倍数,然后进行取余。
4、也就是说W:0-6,然后根据取值选择星期。
#include <iostream> #include<string.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int inf=70000; int main(int argc, char** argv) { char month[15][10]={{"0"},{"0"},{"0"},{"March"},{"April"},{"May"},{"June"},{"July"},{"August"},{"September"},{"October"},{"November"},{"December"},{"January"},{"February"}}; char week[7][10]={{"Sunday"},{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"}}; int y; int d; int m; int w; char mon[10]; scanf("%d%s%d",&d,&mon,&y); for(int i=3;i<15;i++){ if(strcmp(month[i],mon)==0){ m=i; break; } } if(m>=13){ y--; } int C=y/100; y=y-(y/100)*100; w=(C/4)-2*C+y+(y/4)+(26*(m+1)/10)+d-1; if(w>7) w%=7; if(w<0) { w=(w+inf)%7; } printf("%s",week[w]); return 0; }