c解决打鱼晒网问题

来源:互联网 发布:网络电视显示无信号 编辑:程序博客网 时间:2024/04/19 16:35

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

       打鱼还是晒网问题

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

   题目: 渔夫打渔,三天打渔两天晒网,从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