/**************************************************************************************
*中国有句俗语叫"三天打鱼两天晒网"。某人从1990年1月1日起开始
“三天打鱼两天晒网”,问这个人在以后的某一天中是"打鱼"还是"晒网"。
问题分析与算法设计:
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于"打鱼"和"晒网"的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在"打鱼"还是在"晒网";若余数为0,1,2,则他是在"打鱼";否则是在"晒网"。
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否
有闰年,二月为29天,平年为28天。
闰年的方法可以用伪语句描述如下:如果 ((年能被4除尽且不能被100除尽)或能被400除尽)
则该年是闰年;否则不是闰年。
***************************************************************************************/
#include <iostream>
using namespace std;
int is_LeapYear(int year)
{
if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
return 0;
else
return 1;
}
int days_from_orig(int y, int m, int d)
{
int days = 0, year, month;
for(year = 1990; year < y; year++)
{
if(is_LeapYear(year))
days += 366;
else
days += 365;
}
for(month = 1; month < m; month++)
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
case 2:
days += (is_LeapYear(y) ? 29 : 28);
break;
default:
days += 31;
}
}
days += (d - 1);
return days;
}
int is_sleeping(int days)
{
return ((days % 5 == 3) || (days % 5 == 4)) ? 1 : 0;
}
int main()
{
int year, month, day;
cin >> year >> month >> day;
if(is_sleeping(days_from_orig(year, month, day)))
cout << "sleeping\n";
else
cout << "fishing\n";
return 0;
}
三天打鱼两天晒网
最新推荐文章于 2022-09-17 21:40:03 发布