打渔晒网问题

题目:如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫是在打渔还是在晒网。

#include <stdio.h>
int leap(int a)
{
    if(a%4==0&&a%100!=0||a%400==0) //判断闰年
        return 1;
    else return 0;
}
int number(int year,int month,int day)
{
    int i,j,k,sum;
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    if(leap(year)==1)
        for(i=0;i<month-1;i++)
            sum+=b[i]; //闰年,累加数组b前m-1个月的天数
        else 
            for(j=0;j<month-1;j++)
                sum+=a[j]; //平年,累加数组a前m-1个月的天数
            for(k=2011;k<year;k++)
            if(leap(k)==1)
                sum+=366; //2011年到输入的年份是闰年的加366
            else sum+=365; //2011年到输入的年份是平年的加365
            sum+=day; //将前面累加的结果加上日期,求出总天数
            return sum;
}
int main()
{
    int year,month,day,n;
    printf("请输入年月日\n");
    scanf("%d%d%d",&year,&month,&day);
    n=number(year,month,day);
    if((n%5)<=3&&(n%5)>0) //余数为1或2或3时说明在打渔,其他则在晒网
        printf("%d-%d-%d 打渔\n",year,month,day );
    else printf("%d-%d-%d 晒网\n",year,month,day );
    return 0;
}

结果

E:\c++>a
请输入年月日
2011 5 5
2011-5-5 晒网

E:\c++>
E:\c++>a
请输入年月日
2012 5 5
2012-5-5 打渔

 

posted @ 2018-04-25 21:07  糖小俊  阅读(357)  评论(0编辑  收藏  举报