c解决打鱼晒网问题

------------------------------------------------------------------------------

       打鱼还是晒网问题

-------------------------------------------------------------------------------

   题目: 渔夫打渔,三天打渔两天晒网,从199011日从业,给出年月日,这天,是打渔还是晒网。

思路:当你看到这道题,也许也是没有思路,所以先慢慢分析

   目标:1.解决那天打鱼还是晒网问题,,,,,你首先得知道这一年过了多少天,这样在就%5,就简单。

         2.你解决一年过了多少天,就得先判断这一年过了多少天,再加上你从1990到现在过了多少年,剩余那是最麻烦的平年闰年问题;

         3.还得再加一句,你的那个月份,得计算在这一年中你过了多少个月,这样子就可以几号直接一加(平年2月28,闰年2月29,在得判断一次闰年平年)

#include<stdio.h>
bool leap(int year)//判断是不是闰年
{
	if((year % 4 == 0 && year % 100 !=  0)||(year % 400 ==0))
	{
		return 1; 
	}
	else 
	{
		return 0;
	}
}
int monthly(int year,int month ,int day)//判断到目前为止过了天数
{
	int a[11] = {31,28,31,30,31,30,31,31,30,31,30};//一年十二月就变成了一个数组,这个数组是没有十二月份的这么解释,如果12月
	                                            //无论十几号,你只要把前11个月的加起来,再加上你十二月过了的天数,就是你的总天数
	int rs = 0;//用它来保存天数
	if(leap(year)==1)   //平年和闰年的二月份不相同
	{
		a[1]= 29;
	}
	for(int i =0;i < month-1;i ++)//数组是从0开始,但是你的月份从一月份开始,此时最大为month-1为什么不取month-1
	{                             //你的月份还没过完
		rs = rs + a[i] ;
	}
	rs= rs +day;
   return rs;
}
int amont (int year,int month ,int day)//判断到今年为止,你过了多少年
{
	int i = 1990;
	int sum = 0;
	while(i < year)
	{
		if(leap(i)==1 )
		{
			sum = sum + 366;
		}
		else
		{
			sum = sum + 365;
		}
		i ++;
	}
	sum = sum +monthly (year,month,day);
	return sum;
}
bool fish_net(int year ,int month ,int day)//判断打鱼还是晒网
{
	int b = 0;
	
	b = amont( year,month,day ) % 5;//他是三天打鱼两天晒网,所以就是五天一个轮回
	if(b == 0 || b == 4)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main ()
{
	int y = 1993;
	int m =3;
	int d =1;
	if(y >= 1990)
	{
		if(fish_net(y,m ,d))
		{
			printf("晒网\n");
		}
		else if(fish_net(y,m ,d)==0)
		{
			printf("打鱼\n");
		}
	}
	else
	{
		printf("还没开业!\n");
	}
	return 0;
}
ok,代码结束!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值