淘宝网店一变相日期计算器

NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。现在给你一段时间区间,请你帮他计算总收益有多少。
链接:https://www.nowcoder.com/questionTerminal/754921e9c98b43d1b2d70c227b844101
来源:牛客网

输入描述:
输入包含多组数据。

每组数据包含两个日期from和to (2000-01-01 ≤ from ≤ to ≤ 2999-12-31)。

日期用三个正整数表示,用空格隔开:year month day。

输出描述:
对应每一组数据,输出在给定的日期范围(包含开始和结束日期)内能赚多少钱。
示例1
输入
2000 1 1 2000 1 31
2000 2 1 2000 2 29
输出
62
29

刚见到这个题时,也是感觉很蒙,后来仔细一想,有了思路,就是日期计算器的变种。

1.我们把2,3,5,7,11月里每天算一天,而其余7个月每天算两天。
2.然后再一个计算日期是该年的第几天,和一个完整的整年函数。
3.进而如果两个年份再同一年,则只需运用后面那个在该年的天数-前面那个在该年的天数 即可的。
3当两个年份不在同一年的时候,则需要让第一个完整的整年天数减去在该年的的几天,然后加上后面那年是第几天,然后再加上中间的整年天数。

#include<iostream>
#include<vector>
using namespace std;
int isPrim(int year) {   //是闰年就+1,多一天
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
		return 1;
	}
	else {
		return 0;
	}
}
 //每一年的天数
int wan_year_day(int year) {
	int total = 0;
	total = 31 * 2 +1* 28 +1*31 + 30 * 2 +1* 31 + 30 * 2 + 31 
		+ 31 * 2 + 30 * 2 + 31 * 2 + 30 + 31 * 2 + isPrim(year);
	return total;
}

int isMonth(int month) {
	if (month == 2 || month == 3 || month == 5 || month == 7 || month == 11) {
		return 1;
	}
	else {
		return 2;
	}
	//判断是否是素月

}
//计算该日期在本年的第几天
int day_of_year(int year, int month, int day) {    
	int months[12] = { 62,28,31,60,31,60,31,62,60,62,30,62 };
	int total = 0;
	for (int i = 0; i < month - 1; i++) {
		total += months[i];
	}
	if (isMonth(month) == 2) {
		total += day*2;
	}
	else {
		total += day;
	}
	if (month > 2) {
		total += isPrim(year);
	}
	return total;
}

int main()
{
	int year1, month1, day1, year2, month2, day2;
	int count_profit = 0;
	cout << wan_year_day(1999);
	while (cin >> year1 >> month1 >> day1 >> year2 >> month2 >> day2) {
		count_profit = 0;
		//同一年,直接相减,但是要注意后面的day-1  是需要的,  
		if (year1 == year2) {
			count_profit = day_of_year(year2, month2, day2) - day_of_year(year1, month1, day1-1) ;
			cout << count_profit << endl;
			continue;
		}
		else
		{
			count_profit = wan_year_day(year1) - day_of_year(year1, month1, day1-1) ;
			for (int i = year1 + 1; i < year2; i++) {
				count_profit += wan_year_day(i);
			}  //加上整年天数
			count_profit += day_of_year(year2, month2, day2);   
			cout << count_profit << endl;
			continue}
	}
	system("pause");
	return 0;

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值