欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

淘宝网店-牛客网-c++

程序员文章站 2022-05-14 18:16:31
...

NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。
现在给你一段时间区间,请你帮他计算总收益有多少。

输入

2000 1 1 2000 1 31
2000 2 1 2000 2 29

输出

62
29

解题思路:
分为俩种情况 一种为同年,一种为不同年。不同年又分为,year1 所在的年,year2 所在的年,year1和year2中间所在的年。

#include <iostream>
using namespace std;
#include <vector>
int _leapYDs[] = { 0,31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int _nleapYDs[] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int P[] = {0, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2 };
bool isLeapYear(int year)
{
	if (year % 4 == 0 && year % 100 != 0)
	{
		return true;
	}
	else if (year % 100 == 0 && year % 400 == 0)
	{
		return true;
	}

	return false;
}

int commonYear(int year1, int month1, int day1, int year2, int month2, int day2)
{
	int sum = 0;
	if (month1 == month2)
	{
		for (int i = day1; i <= day2; i++)
		{
			sum += P[month1];
		}
		return sum;
	}
	if (isLeapYear(year1))
	{
		for (int i = day1; i <= _leapYDs[month1]; i++)
		{
			sum += P[month1];
		}
	}
	else
	{
		for (int i = day1; i <= _nleapYDs[month1]; i++)
		{
			sum += P[month1];
		}
	}
	
	month1++;
	while (month1 < month2)
	{
		if (isLeapYear(year1))
		{
			sum += _leapYDs[month1] * P[month1];
		}
		else
		{
			sum += _nleapYDs[month1] * P[month1];
		}
	}
	
	for (int i = 1; i <= day2; i++)
	{
		sum += P[month2];
	}
	
	return sum;
}

int notCommonYear(int year1, int month1, int day1, int year2, int month2, int day2)
{
	int sum = 0;
	//year1
	if (isLeapYear(year1))
	{
		for (int i = day1; i <= _leapYDs[month1]; i++)
		{
			sum += P[month1];
		}
	}
	else
	{
		for (int i = day1; i <= _nleapYDs[month1]; i++)
		{
			sum += P[month1];
		}
	}
	month1++;
	for (month1; month1 < 13; month1++)
	{
		if (isLeapYear(year1))
		{
			sum += _leapYDs[month1] * P[month1];
		}
		else
		{
			sum += _nleapYDs[month1] * P[month1];
		}
	}
	//中间
	int year = year1 + 1;
	
	while (year < year2)
	{
		int month = 1;
		while (month < 13)
		{
			if (isLeapYear(year))
			{
				sum += _leapYDs[month] * P[month];
			}
			else
			{
				sum += _nleapYDs[month] * P[month];
			}
			++month;
		}
		++year;
	}

	//year2
	if (isLeapYear(year2))
	{
		for (int i = 1; i < month2; i++)
		{
			sum += _leapYDs[i] * P[i];
		}
	}
	else
	{
		for (int i = 1; i < month2; i++)
		{
			sum += _nleapYDs[i] * P[i];
		}
	}
	
	for (int i = 1; i <= day2; i++)
	{
		sum += P[month2];
	}
	return sum;
}

int main()
{
	int year1, month1, day1;
	int year2, month2, day2;
	while (cin >> year1 >> month1 >> day1 >> year2 >> month2 >> day2)
	{
		int sum;
		if (year1 == year2)
		{
			sum = commonYear(year1, month1, day1, year2, month2, day2);
			cout << sum << endl;
		}
		else
		{
			sum = notCommonYear(year1, month1, day1, year2, month2, day2);
			cout << sum << endl;
		}
	}
	return 0;
}
相关标签: 日常练习