1.问题描述
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
2.算法分析
(1) 要计算从2010年1月1日起到指定的某一天共有多少天
在此重要的是要判断闰年,平年加365天闰年加366天;判断闰年的方法是:年份能被4除尽而不能被100除尽或者能被400除尽(year%4==0&&year%100!=0||year%400=0)
(2) “打鱼”“晒网”的周期是5天,所以可以用计算出来的天数除以5,根据余数判断是在“打鱼”还是“晒网”:余数1,2,3是在打鱼4,0是在晒网
(3)算法流程图:
3.源代码
/*
Name: 判断打鱼还是晒网
Copyright: 2021 Lu
Author:Lu
Date: 21/03/21 23:22
Description: 输入年份日期判断是否输入正确,
计算天数,平年加365天 闰年加366天;
对天数取余,判断打鱼还是晒网;
*/
#include "iostream"
#include "fstream"
using namespace std;
class Time{
//定义年月日
private:
int year;
int month;
int day;
int alldays;//距2010年1月1日总天数
int monthd[12];//记平年每月天数
int dday;//除5取余的余数
public:
int Calculdays(); //算天数,每年先按365天计算,在判断有几个闰年再加几天
int Judge(); //判断年份输入正确与否打鱼晒网
};
//计算天数
int Time::Calculdays()
{
alldays=