中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
根据题意可以将解题过程分为三步:
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”; 若 余数为1,2,3,则他是在“打渔”;否则 是在“晒网”
在这三步中,关键是第一步。求从2010年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽), 则 该年是闰年,否则 不是闰年。
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;
class Time
{
private:
int year;
int month;
int day;
public:
Time();
Time(int y,int m,int d):year(y),month(m),day(d){}
void shuru();
int panduan();
void sum();
};
void Time::shuru()/*输入年月日*/
{
cin>>year>>month>>day;
}
int Time::panduan ()/*判断年、月、日输入的合法性*/
{
int m1;
if(year<2010)
{
m1=1;
cout<<"输入年份不符合要求!"<<endl;
}
else
m1=0;
int m2;
if(month<1||month>12)
{
m2=1;
cout<<"输入月份不符合要求!"<<endl;
}
else
m2=0;
int m3;
if(month%2==1)
{
if(day>31)
{
m3=1;
cout<<"输入日期不符合要求!"<<endl;
}
else
m3=0;
}
if(month%2==0)
{
if(day>30)
{
m3=1;
cout<<"输入日期不符合要求!"<<endl;
}
else
m3=0;
}
else if(year%400==0)
{
if(day>29)
{
m3=1;
cout<<"输入日期不符合要求!"<<endl;
}
else
m3=0;
}
else
{
if(day>28)
{
m3=1;
cout<<"输入日期不符合要求!"<<endl;
}
else
m3=0;
}
if(m1==0&&m2==0&&m3==0)
return 1;
else
{
cout<<"请重新输入!"<<endl;
}
return 0;
}
void Time::sum()/*计算总天数*/
{
int YEAR=2010;
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int zong=0;
for (YEAR;YEAR<year;YEAR++)
{
if(year%400==0)/*判断平闰年的天数*/
{
zong+=366;
}
else
zong+=365;
}
for (int i=1;i<month;i++)
{
zong+=m[i-1];
if(month>2&&year%400==0)/*判断输入月份*/
{
zong+=1;
}
}
zong+=day;
if(zong%5==0 || zong%5==4)
{
cout<<"今天晒网"<<endl;
}
else
cout<<"今天打渔"<<endl;
}
int main()
{
cout<<"请输入年 月 日"<<endl;
Time t1(0,0,0);
t1.shuru();
t1.panduan();
t1.sum();
return 0;
}
判断日期合理性
调试总天数