c语言 最强魔法师(打鱼晒网的变形题)

1.这道题主要用到函数、for循环语句、switch选择语句和if选择语句。

2.整体来说这道题难度并不大,是一道打鱼晒网经典题目的改编。

3.用long long定义年份,防止测试数据的年份过大导致运行出现乱码。

4.这道题的大概思路:先计算两个日期在该年是第几天(x、y),由于要计算两次,所以用到函数计算第几天,节省代码。然后用一个for循环来计算两个日期间的闰年和平年个数(a、b)。总间隔天数Allday=a*366+b*365-x+y;最后就是用if else选择输出打鱼or晒网。

 

 

#include<stdio.h>
int DayOfTheYear(long long year, int month, int day);  //计算该年的第几天
int main()
{
	long long y1, y2,i;  //避免y过大
	int  m1, d1, m2, d2;  //x,y代表是该年的第几天
	int Allday, x=0, y=0, a=0, b=0;   //a,b代表y1 y2之间的闰、平年,Allday代表间隔天数
	scanf("%lld-%d-%d\n", &y1, &m1, &d1);
	scanf("%lld-%d-%d", &y2, &m2, &d2);
	x = DayOfTheYear(y1,m1,d1);
	y = DayOfTheYear(y2,m2,d2);
	for (i = y1; i < y2; i++)
	{
		if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0))  //计算平、闰年
			a++;
		else
			b++;
	}
	Allday = a * 366 + b * 365 - x + y;
	if (0 < (Allday % 5) && (Allday % 5) < 4)
		printf("He is fishing.\n");
	else
		printf("He is drying the net.\n");
}

int DayOfTheYear(long long year, int month, int day)
{
	int s = 0;
	switch (month)
	{
	case 12:s += 30;
	case 11:s += 31;
	case 10:s += 30;
	case 9:s += 31;
	case 8:s += 31;
	case 7:s += 30;
	case 6:s += 31;
	case 5:s += 30;
	case 4:s += 31;
	case 3:s += 28;
	case 2:s += 31;
	case 1:s += day;
	}
	if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0) && month >= 3)
		s++;
	return s;
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值