中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
问题的关键是计算从2010年1月1日起至某一天共有多少天,通过总天数除5取余来判断是打鱼还是晒网,我是用C++写的。
#include<iostream>
using namespace std;
class Date //声明Date类
{
private:
int year;
int month;
int day;
public:
void print_date(); //输入要判断的日期
int is_leap(int y); //判断某一年是否为闰年
int all_days(); //计算从2010年1月1日至输入的日期共有多少天
void catch_sun(); //判断输入的这一天是打鱼还是晒网
};
void Date::print_date() //输入要判断的日期
{
cout<<"请输入要判断的日期(2010年1月1日之后):"<<endl;
cin>>year>>month>>day;
cout<<endl;
}
int Date::is_leap(int y) //判断某一年是否为闰年
{
int leap;
if(y%4==0&&y%100!=0||y%400==0)
leap=1; //lemp=1表示这一年是闰年
else
leap=0;
return leap;
}
int Date::all_days() //计算从2010至输入的日期共有多少天
{
int m1,m2,m=0;
int days; //总天数
int month_day1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年每个月的天数
int month_day2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年每个月的天数
for(int i=2010;i<year;i++) //计算从2010年至输入年份的前一年的天数
{
if(is_leap(i)==1)
{
m1=366;
m=m+m1;
}
else
{
m2=365;
m=m+m2;
}
}
days=m;
if(is_leap(year)==1)
for(int i=1;i<month;i++)
days=days+month_day1[i];
else
for(int i=1;i<month;i++)
days=days+month_day2[i];
days=days+day; //总天数
return days;
}
void Date::catch_sun() //判断输入的这一天是打鱼还是晒网
{
int q=all_days();
cout<<"从2010年1月1日至"<<year<<"年"<<month<<"月"<<day<<"日"<<"共有"<<q<<"天"<<endl;
if(q%5==0||q%5==4)
cout<<"这一天在晒网";
else
cout<<"这一天在打鱼";
}
int main()
{
Date date; //定义对象date
date.print_date();
date.all_days();
date.catch_sun();
return 0;
}