4.11趣味百题第三题

一 问题描述

某人从1990年1月1日开始三天打渔两天晒网,输入一个日期计算该日 是打渔还是晒网.

二 设计思路

1.根据公历的计算方法分为闰年和非闰年,首先先设置一个闰年判断。

2.计算该日的日期在当年是第几天,并加上年份差所差的天数

3.总天数除余5 得出1或2或3则为打渔 得出4或0则为晒网.

三 流程图

四 伪代码

设置每月天数 int mdays[12]={31,28,31,30,31,30,31,31,30,31,30,31}

输入当日日期today

if 当年为闰年 且 day大于二月 则二月为28+1天

年份差chayear=当年年数year - 1990

判断差年每一年是否闰年day++

day2+=chayear*365

day1=是否是闰年大于二月 +之前月份的天数+today

总day=day1+day2

day%5

如果得1,2,3 则打渔

否则晒网

 

 五

#include<iostream>
using namespace std;
int monthdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int runnian(int a){

if((a%4==0&&a%100!=0)||(a%400==0))
return 1;
else return 0;

}
int main()
{
int day1=0;//计算当前日期到本年的天数
int day2=0;//年数差所差天数
int zday=0;//总天数
struct date{
int year;
int month;
int day;


};
date t;
scanf("%d%d%d",&t.year,&t.month,&t.day);
for(int i=1;i<t.month;i++)
{
day1+=monthdays[i];//加上之前月份的天数
}

if(t.month>2){
day1+=runnian(t.year);}//是否二月存在闰年
day1+=t.day;//本月的天数
for(int i=1990;i<t.year;i++)
{
day2+=runnian(i);//期间每一年的闰年判断
}
day2+=(t.year-1990)*365;//差年的天数
zday=day1+day2;

if(zday%5==1||zday%5==2||zday%5==3)
{
cout<<"打渔";
}
else
{
cout<<"晒网";
}

return 0;
}

六 总结与感悟

 

posted @ 2023-04-11 21:15  混沌武士丞  阅读(23)  评论(0)    收藏  举报