实例017:打渔晒网问题
- 实例说明:
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫在打渔还是晒网。
- 实现过程:
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))
for(i=0; i<m-1; i++)
sum +=b[i];
else
for(i=0; i<m-1; i++)
sum +=a[i];
for(j=2011; j<year; j++)
if(leap(j)==1)
sum +=366;
else
sum +=365;
sum +=d;
return sum;
}
void main()
{
int year, month, day, n;
printf("请输入年-月-日\n");
scanf("%d-%d-%d", &year, &month, &day);
n=number(year, month, day);
if((n%5)<4&&(n%5)>0)
printf("%d-%d-%d 打渔\n", year, month, day);
else
printf("%d-%d-%d 晒网\n", year, month, day);
}
- 技术要点:
1.判断输入的年份(2011年以后包括2011年)是否为闰年,这里自定义函数leap()来进行判断。具体可以参考实例014:计算某日是该年的第几天
2.求输入日期距离2011年1月1日还有多少天。首先判断2011年距离输入的年份有多少年,注意区别闰年266,平年365,累加到sum里。其次需要将12个月的每个月的天数存储到数组里,2月分a和b存储。
3.实际是实例014:计算某日是该年的第几天的延伸版,可以联系学习
- 实验结果:
