三天打鱼两天晒网(c++)

来源:互联网 发布:c语言 购物车 编辑:程序博客网 时间:2024/06/06 15:54

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则他是在“晒网”
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则该年是闰年;
否则不是闰年。

#include<iostream>#include<fstream>using namespace std;class Time//时间类 用来定义年月日{   private:        int year;        int month;        int day;   public:       Time(int,int,int);        void set();        int judge();        void find();};//构造函数Time::Time(int y,int m,int d){    year=y;    month=m;    day=d;}//输入函数void Time::set(){    cin>>year>>month>>day;}//判断输入的值是否正确int Time::judge(){    int leag1,leag2,leag3,leag4,leag;    if(year>=2010)//判断输入的年份    {        leag1=0;    }    else    {        leag1=1;    printf("输入的年份不对!年份要大于2010年!");    }    if(month>=1 && month<=12)//判断输入的月份是否正确        leag2=0;    else    {        leag2=1;    printf("输入的月份不对!月份不会超过12月也不会小于1月!");    }   //判断输入的日期是否在范围内    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)    {        if(day>31)        {            leag4=1;        printf("输入的日期不对!%d月不会超过31天!",month);        }        else            leag4=0;    }    else if(month!=2)        if(day>30)        {            leag4=1;        printf("输入的日期不对!%d月不会超过30天!",month);        }        else            leag4=0;        else if(((year%4==0 && year%100!=0 )|| year%400==0))//当输入2月份时,平年与闰年天数不同,判断输入的数据是否正确        {            if(day>29)            {                leag3=1;printf("输入的日期不对!闰年的二月不会超过29天!");            }            else                leag3=0;        }        else         {            if(day>28)            {                leag3=1;            printf("输入的日期不对!平年的二月不会超过28天!");            }            else                leag3=0;        }    leag=leag1+leag2+leag3;    if(leag==0)          return 1;      else    {        cout<<"数据有误,请输入有效数字"<<endl;        cin>>year>>month>>day;    }        return 0;}//计算总天数并判断“打渔”还是“晒网”void Time::find(){   int day1=0;//年的天数   int day2=0;//月的天数   int day3=0;//日的天数   int Day=0;   int i=year-2010;   int k=month-1;   int d;   int monthday1[12]={31,29,31,30,31,30,31,31,30,31,30,31};   int monthday2[12]={31,28,31,30,31,30,31,31,30,31,30,31};   for(int j=0;j<i;j++)   {       if(((2010+j)%4==0 && (2010+j)%100!=0 )|| (2010+j)%400==0)//判断是闰年还是平年(闰年+366天,平年+365天)           day1+=366;       else           day1+=365;   }    for(int p=0;p<k;p++)    {       if((year%4==0 && year%100!=0 )|| year%400==0)           day2+=monthday1[p];//如果是闰年,月份加第一个月份(2月29天)       else           day2+=monthday2[p];//如果是闰年,月份加第二个月份(2月28天)    }   day3=day;   Day=day1+day2+day3;//计算总天数   d=Day%5;//总天数取余,余数为1,2,3打渔,为1,4晒网   if(d<=3 && d>=1)       cout<<"此人打鱼"<<endl;   else       cout<<"此人晒网"<<endl;}//主函数int main(){    int i;//判断次数    cout<<"请输入需要判断的次数:"<<endl;    cin>>i;    for(int a=1;a<=i;a++)    {        cout<<"第"<<a<<"次判断:"<<endl;        for(int j=0;j<a;j++ )       {        cout<<"请输入年月日:年 月 日(起始时间2010年1月1日)(如2010 1 1)"<<endl;        Time t1(0,0,0);        t1.set();//输入        t1.judge();//判断        t1.find();//计算总天数       }    }    return 0;}
0 0