这道题写起来比较简单,但是有一些边边角角的地方需要留心。我的思路是离线处理出从第$1$个月到第$i$个月的天数前缀和,然后对于第$i$个月第$j$天,算出从$1$月$1$日到这一天一共过去了多少天,中间进行取模化简,再计算包括$1$月$1$日的星期四,现在是星期几,最后细心一点结果就出来了。注意如果是星期天,$7\%7==0 $,但是实际上不是“第$0$天”而是第$7$天,特判一下。
上代码:
```
#include<bits/stdc++.h>
using namespace std;
int pre[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
void print(int x){
switch(x){
case 1:printf("Monday");break;
case 2:printf("Tuesday");break;
case 3:printf("Wednesday");break;
case 4:printf("Thursday");break;
case 5:printf("Friday");break;
case 6:printf("Saturday");break;
case 0:printf("Sunday");break;
}
}
int main(){
int day,month;scanf("%d%d",&day,&month);
print(((pre[month-1]+day-1)%7+4)%7);
return 0;
}
```