其他练习题2(未归类)

题目:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数: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;
}

码后总结:
这道题是求日期题中,比较典型的题目。其本质还是求两个日期的差值,值得一做。

猜你喜欢

转载自blog.csdn.net/qq_27538633/article/details/105938539