C 程序設計 - 打魚曬網
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】NOJ 和 C 程序設計習題
[
16 瀏覽
0 評論
4 贊
4 踩
]
概要
從某一天開始,三天打漁兩天曬網,現問,任給一個日期,請輸出這一天應該打漁還是曬網
正文
#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; }