两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C++语言编写程序解决问题。"/>
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C++语言编写程序解决问题。
文章目录
- 前言
- 一、分析题目
- 二、具体代码
- 三、运行截图
- 总结
前言
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C++语言编写程序解决问题。
一、分析题目
根据题意可以将解题过程分为三步:
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从2010年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。
二、具体代码
代码如下
#include<iostream>
using namespace std;class Data
{
public:int year ;int month ;int day ; int days ;
};class Data1 : public Data
{
public:void get_data();bool runnian(int year);int getdays(int year, int month); int countday(int year, int month, int day);void judgedata();void count(); void judge(int days);
};//输入指定日期
void Data1::get_data()
{cout << "请输入年份:" << endl;cin >> year ;cout << "请输入月份:" << endl;cin >> month ;cout << "请输入日期:" << endl;cin >> day;
} //判断数据的可靠性
void Data1::judgedata()
{ int a ;if (month == 2) {if (runnian(year)) a = 29;else a = 28;}else if (month == 4 & 6 & 9 & 11) {a = 30;}else a = 31;while (year < 2010 || month>12 || month < 1 || day>a || day < 1) {cout << "您的输入有误,请重新输入:" << endl;get_data();}
}//判断今年是否是闰年
bool Data1::runnian(int year) {if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {return true;}return false;
}//判断每个月有多少天
int Data1::getdays(int year, int month) {int day1 = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:day1 = 31;break;case 4:case 6:case 9:case 11:day1 = 30;break;case 2:if (runnian(year)) {day1 = 29;}else {day1 = 28;}break;}return day1;
}//计算本年内过去多少天
int Data1::countday(int year, int month, int day)
{int sum = 0;for (int i = 1; i < month; i++) {sum += getdays(year, i);}return sum + day;
}//计算天数
void Data1::count()
{int sum = 0;for (int i = 2010; i < year; i++) {if (runnian(i)) {sum += 366;}else {sum += 365;}}sum += countday(year, month, day);days = sum;cout<<"开始至指定日期共有 "<<sum<<" 天"<<endl;
} //判断今日状态
void Data1::judge(int days)
{int x = days % 5;if (x >= 1 && x <= 3) {cout<<"今日他在打鱼"<<endl;}else {cout<<"今日他在晒网"<<endl;}
}int main()
{Data1 D1;D1.get_data();D1.runnian(D1.year);D1.getdays(D1.year,D1.month);D1.countday(D1.year,D1.month,D1.day);D1.judgedata();D1.count();D1.judge(D1.days);return 0;
}
三、运行截图
总结
本题解决的难点是如何计算指定日期和2010年1月1日之间的天数,首先要考虑到平年和闰年,平年一年有365天,闰年则有366天,其次是每个月的天数不是都一样,1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,平年2月有28天,闰年二月有29天,将以上问题解决后,只需将求得的天数除以5取余,即可得出某人在某天的状态。除此之外,还要考虑到输入数据的可靠真实性,限制输入不合理的数据。
程序首先应该判断输入的年份是否是闰年,返回true或者false,通过返回的值来判断2月的天数以及该年的天数,计算输入年份的前一年到2010年的天数,计算本年以过去的天数,将它们相加,即可得出要求中的天数。
新人发帖,如有不妥,请多见谅!
更多推荐
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C++语言编写程序解决
发布评论