一、问题描述
从1990年1月1日开始三天打鱼两天晒网,以后的某一天是打鱼还是晒网?
二、分析
1、计算1.1到指定天数有几天
2、周期为5天,用天数除以5
3、用余数判断是打鱼还是晒网
1 2 3 都为打鱼,4 0为晒网
先利用循环求出1.1到指定天数有几天,还要考虑闰年情况(闰年二月29天,平年二月28天)。
用year%4==0&&year%100!=0||year%400==0来判断是否为闰年
三、代码
#include<iostream>
using namespace std;
typedef struct date{
int year,month,day;
}DATE;
int runyear(int);
int countDay(DATE);//定义
void main()
{
DATE today;//指定日期
int totalDay;//指定日期到1990.1.1的天数
int result;//余数
cout<<"请输出指定日期"<<endl;
cin>>today.year>>today.month>>today.day;
totalDay=countDay(today);
result=totalDay%5;
if(result>0&&result<4)
{cout<<"今天打渔";}
else
{cout<<"今天晒网";}
}
//接下来判断是否为闰年
int runYear(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))//闰年
{return 1;}
else
{return 0;}//平年
}
//计算天数
int countDay(DATE currentDay)
{
int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//每月的天数数组
int totalDay=0,year,i;
for(year=1990;year<currentDay.year;year++)
//求指定日期前每年的天数累加
{
if(runYear(year))
totalDay=totalDay+366;
else
totalDay=totalDay+365;
}
if(runYear(currentDay.month))
perMonth[2]+=1;//将本年的月的天数加进去
for(i=0;i<currentDay.month;i++)
totalDay+=perMonth[i];//将本月的天数加进去
totalDay+=currentDay.day;
return totalDay;//返回
}
四、结果
标签:totalDay,1.3,4.19,天数,31,int,year,year% From: https://www.cnblogs.com/yindantong/p/17334542.html