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;
}