打鱼还是晒网

一、问题描述

 

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

二、解题思路

此题思路可分为三步

1、计算出从1990年1月1日到给出日期的总天数

2、用计算出的总天数除以五

3、根据余数判断出是打鱼还是晒网,如果余数为1或2或3,则是打鱼,否则为晒网

三、算法设计

利用循环计算出从1990年1月1日到指定日期的天数,其中要注意闰年的二月份有29天。

判断一年是否是闰年,如果年份能被4整除并且不能被100整除就为闰年,或者年份能被400整除也为闰年

四、代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
typedef struct date
{
    int year;
    int month;
    int day;
}Date;
int countDay(Date currentDay);
bool runYear(int year);
int main()
{
    Date today;
    int totalday;
    int result;
    scanf("%d%d%d", &today.year, &today.month, &today.day);
    totalday = countDay(today);
    result = totalday % 5;
    if (result > 0 && result < 4) printf("今天打鱼");
    else printf("今天晒网");
    return 0;
}
bool runYear(int year)
{
    return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
int countDay(Date currentDay)
{
    int permonth[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int totalday = 0, year;
    for (year = 1990; year < currentDay.year; year++)
    {
        if (runYear(year)) totalday += 366;
        else totalday += 365;
    }
    if (runYear(currentDay.year)) permonth[2]++;
    for (int i = 0; i < currentDay.month; i++) totalday += permonth[i];
    totalday += currentDay.day;
    return totalday;
}
View Code

 

 

posted @ 2023-04-18 12:18  海绵宝宝222  阅读(133)  评论(0)    收藏  举报