每日打卡4.17

一、问题描述:

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
二、设计思路:

根据题意可以将解题过程分为3步
(1)计算从1990年1月1日开始至指定日期共有多少天。
(2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除。
(3)根据余数判断他是在“打鱼”还是在“晒网”。
若余数为1,2,3,则他是在“打鱼”,否则是在“晒网”。

三、程序流程图

 

 

  

四、代码实现

#include<stdio.h>

typedef struct date {

int year;

int month;

int day;

}DATE;

int countDay(DATE);             /*函数声明*/

int runYear(int);               /*函数声明*/

int main()

{

    DATE today;

    int totalDay;

    int result;

    printf("please input 指定日期 包括年,月,日 如:1999 1 31\n");

    scanf("%d%d%d",&today.year,&today.month,&today.day);

    totalDay=countDay(today);

    result=totalDay%5;

    if(result>0&&result<4)

        printf("今天打鱼");

    else

        printf("今天晒网");

}

int runYear(int year)

{

    if((year==0&&year%100!=0)||(year%4==0))

        return 1;

    else

        return 0;

}

int countDay(DATE currentDay)

{

    int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30};

    int totalDay=0,year,i;

    for(year=1990;year<currentDay.year;year++)

    {

        if(runYear(year))

            totalDay=totalDay+366;

        else

            totalDay=totalDay+365;

    }

    if(runYear(currentDay.year))

        perMonth[2]+=1;

    for(i=0;i<currentDay.month;i++)

        totalDay+=perMonth[i];

    totalDay+=currentDay.day;

    return totalDay;

}

posted @ 2023-04-17 20:14  恋恋恋白  阅读(20)  评论(0)    收藏  举报