中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
本程序可自行判断用户输入的时间是否有误,还可以提示用户平年没有2月29日,直到用户完成正确的时间输入,计算出该天是“打渔”还是“晒网”,才会退出。
/*文 件 名:Fishingandreading
作 者 :Key-不会挖洞的猫鼬
版 本 号:20170312.3.01
编译环境:Visual Studio 2015
完成日期:2017.3.12
主要功能:计算2010年1月1日及之后某天是“打渔”还是“晒网”
*/
#include<iostream>
using namespace std;
int main()
{
int year, month, day;
int days = 0;
cout << "请输入要计算的日期(2010年1月1日及之后 例: 2010 1 1):" << endl;
cin >> year >> month >> day ;
if (year < 2010) //判断年份输入是否符合要求
{
cout << "输入的年份有误!" << endl;
return main();
}
else
{
int i;
//计算2010年1月1日到本年1月1日有多少天
for (i = 2010; i < year; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) //判断i年是否为闰年
{
days += 366;
}
else
{
days += 365;
}
}
if (month > 12 || month <= 0) //判断月份输入是否符合要求
{
cout << "输入的月份有误" << endl;
return main();
}
//计算本年1月1日到本年本月1日有多少天
else
{
for (i = 1; i < month; i++)
{
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
{
days += 31;
}
if (i == 4 || i == 6 || i == 9 || i == 11)
{
days += 30;
}
//2月闰年与平年不同情况的处理
if (i == 2)
{
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
{
days += 29;
}
else
{
days += 28;
}
}
}
}
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
if (day > 0 && day < 32) //判断输入的日期是否有误
{
days += day;
}
else
{
cout << "输入的日期有误!" << endl;
return main();
}
}
if (month == 4 || month == 6 || month == 9 || month == 11)
{
if (day > 0 && day < 31) //判断输入的日期是否有误
{
days += day;
}
else
{
cout << "输入的日期有误!" << endl;
return main();
}
}
//2月闰年与平年不同情况的处理
if (month == 2)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
if (day > 0 && day < 30) //判断闰年情况下输入的日期是否有误
{
days += day;
}
else
{
cout << "输入的日期有误!" << endl;
return main();
}
}
else
{
if (day > 0 && day < 29) //判断平年情况下输入的日期是否有误
{
days += day;
}
else
{
cout << "输入的日期有误!(该年为平年,没有2月29日)" << endl;
return main();
}
}
}
//计算打鱼还是晒网
days = days % 5;
if (days == 0 || days == 4) //晒网
{
cout << "该天他晒网" << endl;
}
else //打鱼
{
cout << "该天他打渔" << endl;
}
return 0;
}