一、问题描述
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是 “打鱼”还是“晒网”。
二、解题思路
此题思路可分为三步
1、计算出从1990年1月1日到给出日期的总天数
2、用计算出的总天数除以五
3、根据余数判断出是打鱼还是晒网,如果余数为1或2或3,则是打鱼,否则为晒网
三、算法设计
利用循环计算出从1990年1月1日到指定日期的天数,其中要注意闰年的二月份有29天。
判断一年是否是闰年,如果年份能被4整除并且不能被100整除就为闰年,或者年份能被400整除也为闰年
四、代码实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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
标签:totalday,还是,打鱼,int,31,currentDay,year,晒网 From: https://www.cnblogs.com/zk126/p/17327976.html