一.题目名称:“三天打鱼两天晒网”
二.题目内容:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
三.程序与程序注释:
#include<stdio.h>
int main()
{
int year,month,day;
int m;
int sum;
int sum1=0; //设置变量的初始值, 所输日期的除去本月的某年的天数之和
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立一个有平年各月份天数的数组
scanf("%d%d%d",&year,&month,&day); //输入日期
while((year<2010)||(month<1)||(month>12)||(day>a[month])||(month2&&(year%4!=0||year%400!=0)
&&(day>=29))) //判断输入日期是否合理
{
printf(“您输入的日期有错误,请重新输入\n”);
printf(“请您重新按年月日输入日期,中间用空格隔开\n”);
scanf("%d%d%d",&year,&month,&day);
}
for( m=0;m<month;m++)
{ sum1+=a[m];
if((year%4
0&&year%100!=0)&&month>2) //判断是否是闰年且月份大于2
sum=(year-2010)*365+sum1+day+((year-2008)/4); //(year-2008)/4算的是所算日期至2010.1.1所包含的闰年个数
else
sum=(year-2010)*365+sum1+day; //没有闰年时天数的算法
}
printf(“距离2010.1.1的天数为%d\n”,sum); //输出距离2010.1.1的天数
if((sum%51)||(sum%52)||(sum%5==3)) //求余并判断
printf(“今天这个人打鱼!\n”);
else
printf(“今天这个人晒网!\n”);
return 0;
}

四.算法设计思路:
“三天打鱼两天晒网”---第一章作业说明

五.调试截图:
“三天打鱼两天晒网”---第一章作业说明
“三天打鱼两天晒网”---第一章作业说明

六.测试结果:
“三天打鱼两天晒网”---第一章作业说明
七.遇到的困难及解决方案:
刚开始写代码的时候,一直想不到该如何计算有闰年存在时所输日期距2020.1.1的天数,然后我就随意写出几个日期,手动计算天数并找出规律,然后发现可以以2008年为分界线,由于2008年是闰年,每四年一循化,所输日期的年份减去20008所得的差再除以4就可得出所输日期距离2010年中间闰年的个数,然后就可以得出计算公式:
总天数sum=(year-2010)*365++day+(year-2008)/4
问题得以解决。

相关文章:

  • 2022-02-25
  • 2021-07-19
  • 2021-08-21
  • 2021-07-20
  • 2021-11-17
  • 2021-08-05
  • 2021-08-19
猜你喜欢
  • 2021-09-03
  • 2021-05-05
相关资源
相似解决方案