C语言算法之打渔晒网问题

如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后任意一天,输出该渔夫是在打渔还是在晒网。

代码如下:

 

#include <stdio.h>
int leap(int a)  /*自定义函数leap()用来指定输入的年份是否为闰年*/
{
	if((a%4 == 0 && a%100 != 0 )|| a%400 == 0)  /*闰年判断条件*/
		return 1;                             /*是闰年返回1*/
	else
		return 0;                             /*不是闰年返回0*/
}
int number(int year,int m,int d)  /*自定义函数number()计算输入日期距2011年1月1日共有多少天*/
{
	int sum = 0,i,j,k,a[12]=
	{
		31,28,31,30,31,30,31,31,30,31,30,31
	};                            /*数组a存放平年每月天数*/
	int b[12] = 
	{
		31,29,31,30,31,30,31,31,30,31,30,31
	};                            /*数组b存放闰年每月的天数*/
	if(leap(year) == 1)            /*判断是否为闰年*/
		for(i = 0;i < m - 1;i++)
			sum += b[i];          /*是闰年,累加数组b前m-1个月份的天数*/
	else
		for(i = 0;i < m - 1;i++)
			sum += a[i];          /*不是闰年,累加数组a前m-1个月份的天数*/
	for(j = 2011;j<year;j++)
	if(leap(j) == 1)
		sum += 366;               /*2011年到输入的年份就是闰年的加366*/
	else
		sum += 365;               /*2011年到输入的年份不是闰年加365*/
	    sum += d;                 /*将前面累加的结果加上日期,求出总天数*/
	return sum;                   /*返回计算的天数*/
}
int main()
{
	int year,month,day,n;
	printf("请输入年月日\n");
	scanf("%d%d%d",&year,&month,&day);  /*输入年月日*/
	n = number(year,month,day);         /*调用函数number()*/
	if((n%5) < 4 && (n%5) > 0)          /*当余数是1或2或3时说明在打渔,否则在晒网*/
		printf("%d-%d-%d 打渔\n",year,month,day);   
	else
		printf("%d-%d-%d 筛网\n",year,month,day);
}

运行结果:

请输入年月日

2015 5 5

2015-5-5 打渔

你可能感兴趣的:(c,算法)