其他分享
首页 > 其他分享> > C语言渔夫打鱼晒网问题

C语言渔夫打鱼晒网问题

作者:互联网

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

int leo(int a)
{
	if (a % 400 == 0 || a % 4 == 0 && a % 100 != 0)
	{
		return 1;
	}
	else
		return 0;
}
int messi(int year, int month, int day)
{
	int i = 0;
	int sum = 0;//总天数设为sum
	int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//非闰年
	int b[12]= { 31,29,31,30,31,30,31,31,30,31,30,31 };//闰年各月份
	if (leo(year) == 1)
	{
		for (i = 0; i < month - 1; i++)//计算到前一个月 因为这个月可能没过完
			//而且由于是坐标 所以从0开始
		{
			sum += b[i];
		}
	}
	else
	{
		for (i = 0; i < month - 1; i++)
		{
			sum += a[i];
		}
	}
	int j = 0;
	for (j = 2011; j < year; j++)//同月份一样 从2011年到输入的前一年
	{
		if (leo(year) == 1)
		{
			sum += 366;//如果是闰年加366
		}
		else
		{
			sum += 365;//从2011到现在不是闰年加365
		}
	}
	sum += day;//加上输入的天数
	return sum;
}
#include<stdio.h>
int main()
{
	//输出以后的任意一天的年月日 即是具体的日期
	int year = 0;
	int month = 0;
	int day = 0;
	scanf_s("%d %d %d", &year, &month, &day);
	int ret=messi(year, month, day);//ret接收返回值 这个值就是
	//从开始那一天到我们所找的之后的任意一天之间的时间
	if ((ret%5)<= 3&&(ret%5)>0)//三天打鱼两天晒网 则以5为一个大周期
		//总天数%5 余数为1,2,3则在打鱼 0,1,2则在晒网
	{
		printf("打鱼");
	}
	else
	{
		printf("晒网");
	}
	return 0;
}

标签:晒网,int,sum,30,C语言,渔夫,year,month,31
来源: https://blog.csdn.net/m0_61784000/article/details/120613862