少处理一年 少处理一个月 你懂得
Code
#include <bits/stdc++.h>
using namespace std;
int zhouji = 0; // 全局周几
unordered_map<string,int> um; // 哈希表 月份对应数字
int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
string zhoujiA[8] = {"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
void init(){
um["January"]=1;um["February"]=2;um["March"]=3;um["April"]=4;
um["May"]=5;um["June"]=6;um["July"]=7;um["August"]=8;
um["September"]=9;um["October"]=10;um["November"]=11;um["December"]=12;
}
int main()
{
init();
int d,y;
string str ="" ;
while(cin>>d>>str>>y){ // 读入
int month = um[str]; // 获取月份对应数字
//cout<<"month = "<<month<<endl;
for(int i = 1; i <= y-1; i ++ ){ // 少处理一年
if(i%4==0&&i%100!=0 || i%400==0)day[2]=29;
else day[2] = 28;
for(int j = 1; j <= 12; j ++ ){
for(int k = 1; k <= day[j];k++){
zhouji++;
if(zhouji==8)zhouji = 1;
}
}
}
// 下面处理最后一年
if(y%4==0&&y%100!=0 || y%400==0)day[2]=29;
else day[2] = 28;
for(int i = 1; i <= month-1; i ++ ) // 少处理一个月
for(int j = 1; j <= day[i]; j ++ )
{
zhouji++;
if(zhouji==8)zhouji=1;
}
for(int i = 1; i <= d; i ++ ) // 处理最后一个月
{
zhouji++;
if(zhouji==8)zhouji=1;
}
// cout<<d<<" "<<zhouji<<" "<<zhoujiA[zhouji]<<endl;
cout<<zhoujiA[zhouji]<<endl;
zhouji = 0; // 别忘了 恢复数据
}
return 0;
}