题目描述
模拟:
星期几
https://www.acwing.com/problem/content/3492/
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include<string>
using namespace std;
unordered_map<string,int> ma{
{"January",1},
{"February",2},
{"March",3},
{"April",4},
{"May",5},
{"June",6},
{"July",7},
{"August",8},
{"September",9},
{"October",10},
{"November",11},
{"December",12},
};
int mmd[13] = {0,0,31,28,31,30,31,30,31,31,30,31,30};//当前月已过几天
int year[3010];//记录没一年到第一年的天数
string mm;
int day,yy;
bool is(int x){
if((x%4==0&&x%100!=0)||x%400==0)return true;
return false;
}
int main()
{
for (int i = 1; i <= 3000; i ++ ){
if(is(i)){
year[i]=year[i-1]+366;
}else{
year[i]=year[i-1]+365;
}
}
while(cin >> day >> mm >> yy){
day+=year[yy-1];
int temp = ma[mm];
if(is(yy) && temp >= 3)day+=1;
for (int i = 1; i <= temp; i ++ )//当前月已过几天
day+=mmd[i];
day = day%7;
if(day == 1)cout << "Monday" <<endl;
else if(day == 2) cout << "Tuesday" <<endl;
else if(day == 3)cout << "Wednesday" << endl;
else if(day == 4)cout << "Thursday" << endl;
else if(day == 5)cout << "Friday" << endl;
else if(day == 6) cout << "Saturday" << endl;
else if(day == 0)cout << "Sunday" << endl;
}
return 0;
}