三天打鱼两天晒网问题(C++)

/******************************/
文件名称:三天打鱼两天晒网
编程语言:C++
编译器:Visual C++ 6.0
完成日期:2019年02月28日
作者:无奈¬_¬`啊

一.问题

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
此处我是用C++实现的。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。

二.思考

首先三天打鱼两天晒网,周期为5天,所以只要计算出指定日期到2010年01月01日有多少天,并用这个天数除以5求余数,如果余数是0或者4则说明他在晒网,余数为1,2,3则在打渔,这个不难想象。
接下来我们的主要任务就是求天数,这也是这个问题的核心部分,因为每年的天数不一样,闰年366天,平年365天,所以必须区分好闰年和平年。
可以被4整除而且不被100整除的或者能被400整除的就是闰年,否则是平年。用代码表示则如下:

if(x%4==0&&x%100!=0||x%400==0) temp=1;
	else temp=0;

temp是1表示闰年,0表示平年。
闰年比平年多一天,这个多出来的一天就是2月里28天或者29天,闰年2月有29天。所以在判断日期的正确性的时候需要注意。

if(temp==0)
				{
					if(z>28)
					{
						cout<<"平年2月只有28天!";
						exit(0);
					}
				}

继续求天数,我们先求出2010年到指定年前一年的天数,然后在细算到月份日份。
年份的不同就代表着闰年和平年,所以就麻烦了,你得先判断这段时期之间每一年的年份,然后再决定加多少天。

for(int i=2010; i<x; i++)
	{
		if(temp) t+=366;
		else t+=365;
	}

x为指定年份;
计算好年份后我们就需要计算月份日份了,计算到指定月份的天数加上指定的日份·,就计算出总天数了;
然而又存在大月小月所以加的天数也不同:

switch(y)
	{
		case 1:
			t+=z;
			break;
		case 2:
			t=t+31+z;
			break;
		case 3:
		{
			if(temp==1) t=t+60+z;
			else t=t+59+z;
		}
		break;
		case 4:
		{
			if(temp==1) t=t+91+z;
			else t=t+90+z;
		}
		break;
		case 5:
		{
			if(temp==1) t=t+121+z;
			else t=t+120+z;
		}
		break;
		case 6:
		{
			if(temp==1) t=t+152+z;
			else t=t+151+z;
		}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值