主要是将月份和星期数转化为数字或者字符,运算时就一天一天的加就行了,可以把这个过程带入到你去撕日历的过程中
C++ 代码
#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;
int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
unordered_map<string, int> month_name = {
{"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 week[7] = { "Monday","Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
int isyear(int year) {
return year % 4==0 && year % 100 != 0 || year % 400==0;
}
int getMonth_day(int y, int m) {
if (m == 2) return month[m] + isyear(y);
else return month[m];
}
int main() {
int d, y;
string m;
while (cin >> d >> m >> y) {
int od = 1, om = 1, oy = 1;
int k = month_name[m];
int sum = 0;
while (od < d || om < k || oy < y) {
od++;
sum++;
if (od > getMonth_day(oy, om)) {
om++;
od = 1;
}
if (om > 12) {
oy++;
om = 1;
}
}
cout << week[sum % 7] << endl;
}
}