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;
}
六 总结与感悟
浙公网安备 33010602011771号