中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C++语言编写程序解决问题。

编程入门 行业动态 更新时间:2024-10-09 19:16:01

中国有句俗语叫“三天打鱼<a href=https://www.elefans.com/category/jswz/34/1733467.html style=两天晒网”。某人从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++语言编写程序解决

本文发布于:2024-03-12 10:20:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731298.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两天晒网   解决问题   日起   俗语   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!