问题:中国有句俗语叫“三天打鱼两天晒网”。某人从2018年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
思路先行:
第一步:先判断输入的年份是否为闰年,闰年366天,平年365天;
第二步:计算从2018年1月1日起到以后某年的总天数;
2.1:先判断是否为闰年
2.2:再分别定义平年数组的月份和闰年数组的月份,再加上当年月的月份-1的天数;
2.3:接下来,在从2018年起,年份的个数;
2.4:最后,加上输入年份的日期个数。
第三步:判断“三天打渔,两天晒网”的含义:1,2,3,4,5,6,7,8,9,10.....可以发现以5为周期,余数为1,2,3的为打渔,为0,4的是晒网。
代码如下:
#include <stdio.h> //引用头文件
int leap(int a) //第一步:判断是否为闰年:能被4整除,但被100整除,或者能被400整除
{
if(a%4==0 && a%100!=0 || a%400==0)
return 1; //是闰年返回1
else
return 0; //平年返回0
}
//第二步:
int number(int year,int month,int day) //定义年月日和距离2018年1月1日的总数n
{
int sum=0,int i,j; //定义天数总和sum,变量i,j;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //定义平年的12个月份
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //定义闰年的12个月份
if(leap(year)==1) //判断是否为闰年
for(i=0;i<month-1;i++) //是闰年,累加数组b前month-1个月份的天数
sum +=b[i];
else
for(i=0;i<month-1;i++) //是平年,累加数组a前month-1个月份的天数
sum +=a[i];
for(j=2018;j<year;j++) //从2018年1月1日起,开始计算总天数
if(leap(j)==1)
sum +=366; //是闰年,直接加上366天
else
sum +=365; //是平年,直接加上365天
sum +=day;
return sum; //最后,加上天数分总和
}
//第三步:
void main()
{
int year,month,day,n;
printf("请输入您想判断的年月日:");
scanf("%d%d%d",&year,&month,&day); //输入年月份
n=number(year,month,day);
if((n%5)>0 && (n%5)<4) //注意:1,2,3,4,5,6,7,8,9,....每三天打一次渔,两天晒一次网,循环天数为5,并且余数为1,2,3的为打渔,4,5的为晒网
printf("%d年%月%d日:打渔\n",year,month,day);
else
printf("%d年%d月%d日:晒网\n",year,month,day);
}
输出结果如下: