概述
题目链接:https://www.bilibili.com/video/av21356335?p=3
问题描述:某人从1999年1月1日起开始三天打鱼两天晒网,计算输入的日期是打鱼还是晒网
问题分析:
(1)先计算出输入的日期距1990.01.01一共有多少天
(2)用计算出的天数去取余5,根据结果判断若余数为1,2,3则为打鱼,其他为晒网
程序一:
#include<iostream>
using namespace std;
//判断输入的年份是否为闰年
bool is_leap_year(int year)
{
if ((year%400==0) || ((year%100!=0)&&(year%4==0)))
{
return true;
}
return false;
}
//计算输入的日期距离 1990 年 1 月 1 日一共多少天
int total_day(int year, int month, int day)
{
int total_num = 0;
int this_year = year;
int day_of_month[] = {31,28,31,30,31,30,31,31,30,31,30,31};
while(this_year>1990)
{
if(!is_leap_year(this_year))
{
total_num += 365;
}
else
{
total_num += 366;
}
this_year--;
}
for(int i = 1; i<month; i++)
{
total_num += day_of_month[i-1];
}
//若日期大于二月并且该年是闰年,总天数 + 1
if(month>2 && is_leap_year(year))
{
total_num++;
}
total_num += day;
return total_num;
}
int main()
{
cout<<"请输入日期:"<<endl;
int year,month,day;
int total_number;
cin>>year;
cin>>month;
cin>>day;
total_number = total_day(year,month,day);
cout<<year<<"年"<<month<<"月"<<day<<"日距1990年1月1日一共有"<<total_number<<"天"<<endl;
int remainder = total_number % 5;
if(remainder==1 || remainder==2 || remainder==3)
{
cout<<"今天打鱼!"<<endl;
}
else
{
cout<<"今天晒网!"<<endl;
}
return 0;
}
程序二:定义结构体存储日期
#include<iostream>
using namespace std;
//定义日期结构体
typedef struct date{
int year;
int month;
int day;
}DATE;
//计算天数的函数声明
int countDay(DATE);
//判断是否为闰年的函数声明
int runYear(int);
int main(){
DATE today;
//指定日期
int totalDay;
//指定日期距 1990.01.01的天数
int result;
//总天数对 5 取余的结果
cout<<"输入指定日期: "<<endl;
cin>>today.year;
cin>>today.month;
cin>>today.day;
totalDay = countDay(today);
cout<<"今天是第"<<totalDay<<"天"<<endl;
result = totalDay%5;
if(result>0&&result<4)
cout<<"今天打鱼!"<<endl;
else
cout<<"今天晒网!"<<endl;
return 0;
}
//判断是否为闰年
int runYear(int year)
{
if((year%400==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,i,year;
for(year=1990;year<currentDay.year;year++)
{
if(runYear(year))
totalDay += 366;
else
totalDay += 365;
}
if(runYear(currentDay.year))
perMonth[2] = 29;
for(i=0;i<currentDay.month;i++)
totalDay += perMonth[i];
totalDay += currentDay.day;
return totalDay;
}
最后
以上就是野性小霸王为你收集整理的打鱼晒网问题(C++)的全部内容,希望文章能够帮你解决打鱼晒网问题(C++)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复