您的位置:首页 > 其它

c解决打鱼晒网问题

2016-06-20 17:49 155 查看
------------------------------------------------------------------------------

打鱼还是晒网问题

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

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

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

目标: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,代码结束!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: