三天打鱼两天晒网问题

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若余数为1,2,3,则他是在“打鱼”;否则是在“晒网”。
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽且不能被100除尽)或能被400除尽),则该年是闰年;否则不是闰年。
C语言中判断能否整除可以使用求余运算(即求模)。/* Note:Your choice is C IDE */

#include "stdio.h"
#include"math.h"
void main()
{int a,b,c,d,i,j,k=0;
	int yearsday(int x,int y,int z);
	do{
	printf("for 1990 year,1 month,1 day to x,\n please input year,month,day\n:");
    scanf("%d,%d,%d",&a,&b,&c);
    if((a<1990)||(b<=0)||(b>12)||(c<=0)||(c>31))
    { printf("your datas are error:\n");
    	 k=1;}
    	else k=0; 
    	}while(k);
    
    d=0;
    for(i=1990;i<a;i++)
    d=d+yearsday(i,12,31)%5;
      d=d+yearsday(a,b,c)%5;
      d=d%5;
      if(d<4)
      printf(" \n打鱼");
      else printf("\n晒网");
    
}


int yearsday(int x,int y,int z)
{int k=0,t=0,j;
if((x%400==0)||(x%4==0&&x%100!=0))
k=1;
for(j=1;j<y;j++)
{t=z+30;
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
t=t+1;
else if(y>2)
t=t-2;
}
if(k)
t++;
t=t+z;
return t;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值