「3日間漁をして2日間網を乾かす」問題はC言語で解決?

中国のことわざに「漁三日、網干し二日」というものがあります。1990 年 1 月 1 日から「3 日間
    漁をしこの人に、将来の特定の日に「漁」をするのか、それとも「網を干す」のかを尋ねてください。

    質問の意味に応じて、問題解決のプロセスは 3 つのステップに分けることができます。
    (1) 1990 年 1 月 1 日から指定された日付までの合計日数を計算します。
    (2)「漁」と「網干し」のサイクルは5日なので、計算した日数を5で割ります。
    (3) 残りに応じて、「釣り」をしているのか「投網」をしているのかを判断します。
        残りが 1、2、3 の場合は「釣り」をしており、そうでない場合は「網を干している」ことになります。

    アルゴリズム設計:
            このアルゴリズムは数値計算アルゴリズムであり、指定された日付から 1990 年 1 月 1 日までの日数を求める周期を使用し、その周期内で閏年を考慮する必要があります
            。閏年の2月は29日、
            平年の2月は28日です。
            閏年を判断する方法は、(4 で割り切れて 100 で割り切れない) または
            (400 で割り切れる) 場合、その年は閏年であり、それ以外の場合は閏年ではありません。

#include"stdio.h"

struct DATA   //创建年月日类型的数据
{
    int year;
    int month;
    int day;
};

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

int JiSuan(struct DATA d, int today)
{
    int year = 0;
    int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };  // 一年12个月,每个月的天数。
    ///  年的天数相加
    for (year = 1990; year < d.year; year++)  
    {
        if (PanDuan(year))   // 判断闰年还是平年,修改二月的天数
            arr[2] = 29;
        else
            arr[2] = 28;

        //把一年的天数加起来
        int j = 0;
        for (j = 0; j < 13; j++)
        {
            today += arr[j];
        }

    }

    //  把月的天数也加起来
    int month = 0;
    for (month = 0; month <= d.month-1; month++)
    {
        today += arr[month];
    }

    //  把天数加起来
    today += d.day;

    return today;
}

int main()
{
    struct DATA d;
    
    int today = 0;   // 距今天的总天数
    printf("请输入截止时间:");
    scanf("%d %d %d", &d.year, &d.month, &d.day);
    int day = JiSuan(d,today);
    if ((day % 5) > 0 && (day % 5) < 4)
        printf("距离今天共计:%d天,今天打鱼",day);
    else
        printf("距离今天共计:%d天,今天晒网",day);
}

プログラム実行結果:

 

おすすめ

転載: blog.csdn.net/xingyuncao520025/article/details/131258142