三天打鱼两天晒网问题

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。

基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。

提高要求:1.输入数据的正确性验证。

          2.使用文件进行数据测试。如将日期 20100101   20111214  等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件 

#include<iostream>
#include<math.h>
#include<fstream>
#include<iomanip>
#include<string>

using namespace std;

int main()
{
	int year,month,day,i,n=0;
	int sum,leap;//后面用来累加日期和判断是否是闰年的leap
	string consequence;
	
	//提示语句 提示用户输入年月日
	cout<<"\n请输入年份:";
	cin>>year;
	cout<<"\n请输入月份:";
	cin>>month;
	cout<<"\n请输入日期:";
	cin>>day;

	//将输入的年月日保存到txt文档中
	ofstream InputFile("Input.txt",ios::app);//ofstream向文件写入数据 将输入的信息保存到txt中
	InputFile<<setiosflags(ios::left)<<setw(20)<<year<<setw(20)<<month<<setw(20)<<day<<endl;//分配每个数据的存储空间
	InputFile.close();//关闭文件
	
	//通过月份来判断日期累加的和
	switch(month)
	{
		case 1:sum=0;
			break;
		case 2:sum=31;
			break;
		case 3:sum=59;
			break;
		case 4:sum=90;
			break;
		case 5:sum=120;
			break;
		case 6:sum=151;
			break;
		case 7:sum=181;
			break;
		case 8:sum=212;
			break;
		case 9:sum=243;
			break;
		case 10:sum=273;
			break;
		case 11:sum=304;
			break;
		case 12:sum=334;
			break;
		default:cout<<"输入的月份错误!";//如果不是1-12则提示输入错误
			break;
	}
	sum=sum+day;//再加上某天的天数

	if(year%400==0||(year%4==0&&year%100!=0))  //判断是不是闰年。2008 2012 2016 2020 2024 2028 2032
		leap=1;
	else 
		leap=0;
	if(leap==1&&month>2)  //如果是闰年并且月份大于2,总天数应该加1天
	{
		sum++;
	}

	//判断2010年到输入的那一年为止中间有多少闰年
	for(i=2010;i<year;i++)
	{
		while((i-2010)%400==0||((i-2012)%4==0&&year%100!=0))
		{
			i++;
			n++;
		}
	}
	
	cout<<"这是距离2010年一月一日的第"<<365*(year-2010-n)+366*n+sum<<"天"<<endl;

	if((365*(year-2010-n)+366*n+sum)%5==1||(365*(year-2010-n)+366*n+sum)%5==2||(365*(year-2010-n)+366*n+sum)%5==3)//三天打鱼两天晒网 只有总天数除以5余数是1 2 3时会打鱼 否则晒网
	{
		consequence="这一天打鱼";
		cout<<consequence<<endl;
	}
	else
	{
		consequence="这一天晒网";
		cout<<consequence<<endl;
	}
	ofstream OutputFile("Output.txt",ios::app);//ofstream向文件写入数据 将输入的结果保存到txt中
	OutputFile<<setiosflags(ios::left)<<setw(20)<<year<<setw(20)<<month<<setw(20)<<day<<setw(20)<<consequence<<endl;//分配每个数据的存储空间
	OutputFile.close();//关闭文件

	return 0;

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值