中国有句俗语叫“三天打鱼两天晒网”。某人从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;
}