模拟题
题目描述
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
std::map<int,int> map1;
std::map<int,int> map2;
std::map<int,string> map3;
int fristDay = 4;//1970年的第一天是周五
map1[1] = 31;
map1[2] = 28;
map1[3] = 31;
map1[4] = 30;
map1[5] = 31;
map1[6] = 30;
map1[7] = 31;
map1[8] = 31;
map1[9] = 30;
map1[10] = 31;
map1[11] = 30;
map1[12] = 31;
map2[1] = 31;
map2[2] = 29;
map2[3] = 31;
map2[4] = 30;
map2[5] = 31;
map2[6] = 30;
map2[7] = 31;
map2[8] = 31;
map2[9] = 30;
map2[10] = 31;
map2[11] = 30;
map2[12] = 31;
map3[1] = "Monday";
map3[2] = "Tuesday";
map3[3] = "Wednesday";
map3[4] = "Thursday";
map3[5] = "Friday";
map3[6] ="Saturday";
map3[0] ="Sunday";
for(int i=1971;i<year;i++){
//判断是否是闰年
if((i%4==0&&i%100!=0)||i%400==0){
for(int j=1;j<=12;j++)
for(int k=1;k<=map2[j];k++)
fristDay++;
}else{
for(int j=1;j<=12;j++)
for(int k=1;k<=map1[j];k++)
fristDay++;
}
}
if((year%4==0&&year%100!=0)||year%400==0){
for(int j=1;j<month;j++)
for(int k=1;k<=map2[j];k++)
fristDay++;
}else{
for(int j=1;j<month;j++)
for(int k=1;k<=map1[j];k++)
fristDay++;
}
for(int i=1;i<=day;i++)
fristDay++;
return map3[fristDay%7];
}
};