用当天的日子对应的星期来推断所给日子的星期
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool isLeapYear(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) return true;
else return false;
}
int main()
{
set<int> bigMonth = { 1,3,5,7,8,10,12 };
string s1;
int year, month, day;
int year2, month2, day2;
vector<string> yue = { "January", "February","March", "April","May", "June", "July","August","September", "October", "November","December" };
vector<string> ti = { "Sunday","Monday","Tuesday","Wednesday", "Thursday", "Friday","Saturday" };
while (cin >> day >> s1 >> year) {
int num = 0;
int i;
for (i = 0; i < yue.size(); i++) {
if (s1 == yue[i]) break;
}
month = i + 1;
bool big;
year2 = 2021;
month2 = 2;
day2 = 7;
int temp;
if (year > 2021) {
temp = year;
year = year2;
year2 = temp;
temp = month;
month = month2;
month2 = temp;
temp = day;
day = day2;
day2 = temp;
big = true;
}
else {
if (year == 2021 && month > month2) {
temp = month;
month = month2;
month2 = temp;
temp = day;
day = day2;
day2 = temp;
big = true;
}
else if (year == 2021 && month == month2 && day > day2) {
temp = day;
day = day2;
day2 = temp;
big = true;
}
big = false;
}
while (!(year == year2 && month == month2 && day == day2)) {
day++;
num++;
if (bigMonth.find(month) != bigMonth.end()) {
if (day > 31) {
month++;
day = 1;
}
}
else if (month == 2) {
if (isLeapYear(year)) {
if (day > 29) {
month++;
day = 1;
}
}
else {
if (day > 28) {
month++;
day = 1;
}
}
}
else {
if (day > 30) {
month++;
day = 1;
}
}
if (month > 12) {
year++;
month = 1;
}
}
if (big)
cout << ti[num % 7] << endl;
else
cout << ti[6 - ((num-1) % 7)] << endl;
}
}