题目:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。
示例 1:
输入:day = 31, month = 8, year = 2019
输出:“Saturday”
示例 2:
输入:day = 18, month = 7, year = 1999
输出:“Sunday”
示例 3:
输入:day = 15, month = 8, year = 1993
输出:“Sunday”
提示:
给出的日期一定是在 1971 到 2100 年之间的有效日期。
代码:
#include<iostream>
using namespace std;
int month[13][2] = {
{
0,0 }, // 0
{
31,31 }, // 1
{
28,29 }, // 2
{
31,31 }, // 3
{
30,30 }, // 4
{
31,31 }, // 5
{
30,30 }, // 6
{
31,31 }, // 7
{
31,31 }, // 8
{
30,30 }, // 9
{
31,31 }, // 10
{
30,30 }, // 11
{
31,31 } // 12
};
bool isyeap(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;
}
int main()
{
int t2, t1 = 19710101;
cin >> t2;
int y1, m1, d1;
int y2, m2, d2;
y1 = t1 / 10000, m1 = t1 % 10000 / 100, d1 = t1 % 100;
y2 = t2 / 10000, m2 = t2 % 10000 / 100, d2 = t2 % 100;
int counter = 1;
while (y1 != y2 || m1 != m2 || d1 != d2)
{
counter++;
d1++;
if (d1 == month[m1][isyeap(y1) + 1])
{
d1 = 1;
m1++;
}
if (m1 == 13)
{
m1 = 1;
y1++;
}
}
cout << counter << endl;
int num;
num = counter % 7;
switch (num-1)
{
case 0: cout << "Friday" << endl; break;
case 1: cout << "Saturday" << endl; break;
case 2: cout << "Sunday" << endl; break;
case 3: cout << "Monday" << endl; break;
case 4: cout << "Tuesday" << endl; break;
case 5: cout << "Wednesday" << endl; break;
case 6: cout << "Thursday" << endl; break;
}
system("pause");
return 0;
}
码后总结:
这道题是求日期题中,比较典型的题目。其本质还是求两个日期的差值,值得一做。