问题:中国有句俗语叫“三天打鱼两天晒网”。某人从2011年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
思路:1.判断渔夫实在打鱼还是晒网,其实就是计算日期
2.所以就要求我们要进行日期的判断,判断年份是否为闰年
3.求日期距离2011年1月1日有多少天:
首先是判断距离2011有多少年,闰年的年份366,平年的年份355
int leap (int a)
{
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
return 1;
else
return 0;
}
其次开始计算月份,月份为m的时候,加上m-1个月份对应的天数
int number (int year, int m, int d)
{
int sum = 0, i, j, k, 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 (leap(year) == 1)
for (i = 0; i <= m - 1; i++)
sum += b[i];
else
for (i = 0; i <= m - 1; i++)
sum += a[i];
sum += d;
return sum;
}
最后累加之后,取余来判断是闰年还是平年
if ((n % 5) < 4 && (n % 5) > 0)
printf("%d %d %d 打鱼", year, mouth, day);
else
printf("%d %d %d 晒网", year, mouth, day);
return 0;
运行结果如下
详细代码如下
#include<stdio.h>
#include<stdlib.h>
int leap (int a)
{
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
return 1;
else
return 0;
}
int number (int year, int m, int d)
{
int sum = 0, i, j, k, 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 (leap(year) == 1)
for (i = 0; i <= m - 1; i++)
sum += b[i];
else
for (i = 0; i <= m - 1; i++)
sum += a[i];
sum += d;
return sum;
}
int main ()
{
int year, mouth, day, n;
printf ("请输入年月日:\n");
scanf ("%d %d %d", &year, &mouth, &day);
n = number (year, mouth, day);
if ((n % 5) < 4 && (n % 5) > 0)
printf("%d %d %d 打鱼", year, mouth, day);
else
printf("%d %d %d 晒网", year, mouth, day);
return 0;
}