已知1年1月1号是星期一
①暴力求解:
#include<iostream>
#include<string>
using namespace std;
string weekday[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int monthday[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int is_leap(int y)
{
return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}
int whatday(int y, int m, int d)
{
int ans = 0;
for (int i = 1; i < y; i++)
{
if(is_leap(i))
{
ans += 366 % 7;
ans %= 7;
}
else
{
ans += 365 % 7;
ans %= 7;
}
}
for (int i = 1; i < m; i++)
{
ans += monthday[i] % 7 + (is_leap(y) && i == 2);
ans %= 7;
}
ans += (d - 1) % 7;
ans %= 7;
return ans;
}
int main()
{
int y, m, d;
cin >> y >> m >> d;
cout << weekday[whatday(y, m, d)] << endl;
return 0;
}
②利用吉姆拉尔森公式:
#include<iostream>
#include<string>
using namespace std;
int whatday(int y, int m, int d)
{
if (m <= 2)
{
m += 12;
y--;
}
return (d + m * 2 + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
}
string weekday[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int main()
{
int y, m, d;
cin >> y >> m >> d;
cout << weekday[whatday(y, m, d)] << endl;
return 0;
}