匯東網


C 程序設計 - 打魚曬網

[編輯] [转简体]
|
作者:huidong | 分類:【編程】NOJ 和 C 程序設計習題
[ 3 瀏覽 0 評論 1 贊 1 踩 ]

概要
從某一天開始,三天打漁兩天曬網,現問,任給一個日期,請輸出這一天應該打漁還是曬網

正文

#include <stdio.h>

// 计算任意一天到 0001.01.01 的天数差(不检查日期合法性)
int countdays(int y, int m, int d)
{
    // 相差总天数(每月全部按 31 天计算,后续再减去)
    int total = (y - 1) * 365 + (y / 4 - y / 100 + y / 400) + (m - 1) * 31 + d - 1;
    for (int i = 1; i < m; i++)
    {
        if (i == 4 || i == 6 || i == 9 || i == 11)    // 小月减一天
            total--;
        if (i == 2)    // 闰年二月减两天,平年减三天
            total -= ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) ? 2 : 3;
    }
    return total;
}
// 注:此函數可以改爲村長的更優算法

int main()
{
    int y, m, d;
    printf("从 2024-10-8 开始立 flag,以后要三天打渔两天晒网。\n");
    printf("请问今天是打渔还是晒网?请输入一个日期(例如 2025-10-1):\n");
    scanf("%d-%d-%d", &y, &m, &d);
    int nDeltaDays = countdays(y, m, d) - countdays(2024, 10, 8);
    if (nDeltaDays < 0)
    {
        printf("输入的日期必须在立 flag 之后!");
    }
    else
    {
        int mod = nDeltaDays % 5;
        if (mod < 3)    printf("打渔");
        else            printf("晒网");
    }

    return 0;
}


[ 1] [ 1]


 評論區  0 條評論

+ 添加評論