C语言算法实例017:打渔晒网问题

实例017:打渔晒网问题

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

  • 实现过程:

#include

int leap(int a)
{
    if(a%4==0&&a%100!=0||a%400==0)
        return 1;
    else 
        return 0;
}

int number(int year, int m, int d)
{
    int sum=0, i, j, k, 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))
        for(i=0; i<m-1; i++)
            sum +=b[i];
    else
        for(i=0; i<m-1; i++)    
            sum +=a[i];
    for(j=2011; jif(leap(j)==1)
        sum +=366;
    else    
        sum +=365;
        sum +=d;
    return sum;
}

void main()
{
    int year, month, day, n;
    printf("请输入年-月-日\n");
    scanf("%d-%d-%d", &year, &month, &day);
    n=number(year, month, day);
    if((n%5)<4&&(n%5)>0)
        printf("%d-%d-%d 打渔\n", year, month, day);
    else
        printf("%d-%d-%d 晒网\n", year, month, day);
}
  • 技术要点:
    1.判断输入的年份(2011年以后包括2011年)是否为闰年,这里自定义函数leap()来进行判断。具体可以参考实例014:计算某日是该年的第几天
    2.求输入日期距离2011年1月1日还有多少天。首先判断2011年距离输入的年份有多少年,注意区别闰年266,平年365,累加到sum里。其次需要将12个月的每个月的天数存储到数组里,2月分a和b存储。
    3.实际是实例014:计算某日是该年的第几天的延伸版,可以联系学习

  • 实验结果:
    C语言算法实例017:打渔晒网问题_第1张图片

你可能感兴趣的:(C语言系列)