题解 | #Day of Week#
Day of Week
http://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0
思路
先按年算 再按月算
Ac代码
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
const int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int is_leap(int y){
if(y%4==0 && y%100 || y%400==0) return 1;
return 0;
}
int get_days(int y,int m){
if(m==2) return M[m]+is_leap(y);
return M[m];
}
map<string,int> mp={
{"January",1},
{"February",2},
{"March",3},
{"April",4},
{"May",5},
{"June",6},
{"July",7},
{"August",8},
{"September",9},
{"October",10},
{"November",11},
{"December",12}
};
string w[7]={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int main(){
int d,y;
string prem;
while(cin >> d >> prem >> y){
int m=mp[prem];
int s=0;
//先按照年算
for(int i=1;i<y;i++){
s += 365+is_leap(i);
}
//再按照月份来算
for(int i=1;i<m;i++){
s+=get_days(y,i);
}
s+=d;
s=(s-1)%7;
cout << w[s] << endl;
}
return 0;
}