三天打鱼两天晒网

/**************************************************************************************
*中国有句俗语叫"三天打鱼两天晒网"。某人从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;
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值