#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <stack>
using namespace std;
int type(int n) {
// 四年一润 百年不润 四百年又润
if((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
return 1;
}
return 0;
}
int b[2] = {365, 366};
int d[2][13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
void setIntFromString(string& s, int& year, int& month, int& day) {
string sub = s.substr(0, 4); //pos,len
year = atoi(sub.c_str());
sub = s.substr(4, 2); //pos,len
month = atoi(sub.c_str());
sub = s.substr(6, 2); //pos,len
day = atoi(sub.c_str());
return ;
}
int getDays(int year, int month, int day) {
int days = 0;
// 注意是小于等于
for (int i = 1; i < year; i++) {
days += b[type(i)];
}
for (int i = 1; i < month; i++) {
days += d[type(year)][i];
}
days += day;
return days;
}
void swap(int& a, int& b) {
int t;
t = a;
a = b;
b = t;
}
int main() {
string s1;
string s2;
int y1, m1, d1;
int y2, m2, d2;
cin >> s1; //19970225
s2 = "20200113"; // xq1
setIntFromString(s1, y1, m1, d1);
setIntFromString(s2, y2, m2, d2); // 2020 01 13 xq1
int res = getDays(y1, m1, d1) - getDays(y2, m2, d2); //我要计算 我输入的s1 与 20200113的距离
//正数代表在20200113之后,负数代表在20200113之前
cout << res << endl;
// 基准 20200113 0 xq1
// 20200112 -1 xq7
// 20200111 -2 xq6
// 20200114 1 xq2
// 20200115 2 XQ3
string s[7] = {"XQ1", "XQ2", "XQ3", "XQ4", "XQ5", "XQ6", "XQ7"};
int xq = (res % 7 + 7) % 7;
cout << xq << endl;
cout << s[xq] << endl;
}
/*
//写法2:
int main() {
string s1;
string s2;
int y1, m1, d1;
int y2, m2, d2;
cin >> s1; //19970225
s2 = "00010101"; // xq1
setIntFromString(s1, y1, m1, d1);
setIntFromString(s2, y2, m2, d2);
int res = getDays(y1, m1, d1) - getDays(y2, m2, d2);
cout << res << endl;
string s[7] = {"XQ1", "XQ2", "XQ3", "XQ4", "XQ5", "XQ6", "XQ7"};
int xq = res % 7;
cout << xq << endl;
cout << s[xq] << endl;
}
*/
版本2
#include <iostream>
#include <cmath>
using namespace std;
int days[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31},
};
int all[2] = {365,366};
string month[13] = { "0" , "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string xq[8] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
int type(int n) {
if ( (n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
return 1;
}
return 0;
}
int convertToInt(string s) {
for (int i = 1; i <= 12; i++) {
if (s == month[i]) {
return i;
}
}
}
int getDays(int year,int month,int day) {
int sum = 0;
for (int i = 1 ; i < year ; i++) {
sum += all[type(i)];
}
for (int i = 1 ; i < month ; i++) {
sum += days[type(year)][i];
}
sum += day;
return sum;
}
int main() {
int day,month,year;
string s;
while(cin >> day >> s >> year) {
month = convertToInt(s);
int a1 = getDays(year,month,day);
int a2 = getDays(2020,2,24); // xq 1
int res = a1 - a2;
// 注意 -1 % 7 == -1
int xqNum = (res % 7 + 7) % 7;
cout << xq[xqNum] << endl;
}
}