我是靠谱客的博主 虚幻洋葱,最近开发中收集的这篇文章主要介绍打鱼还是晒网C++,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则 该年是闰年;
否则 不是闰年。

C语言中判断能否整除可以使用求余运算(即求模)

挺简单的一个问题。

代码:

#include<stdio.h>
typedef struct data
{
int year;//年
int month;//月
int day;//日
} Data;
int LeapYear(int year)//判断这一年是不是闰年
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
return 0;
};
int days[2][13]=
{
{0,31,29,31,30,31,30,31,31,30,31,30,31},//闰年每月天数
{0,31,28,31,30,31,30,31,31,30,31,30,31}//平年每月天数
};
int returnalldays(Data a)//计算某一年1月1日到这天的天数
{
int k=1,i=0,sum=a.day;
if(LeapYear(a.year))
k=0;
for( i=1; i<a.month; i++)
{
sum+=days[k][i];
}
return sum;
};
int main()
{
Data b,c;
int cho=1,ans,i;
do
{
ans=0;
c.month=12;
c.day=31;
printf("请输入你要查询的年月日(如2005.8.6)n");
scanf("%d.%d.%d",&b.year,&b.month,&b.day);
for( i=1990; i<b.year; i++) //计算1990年到输入年份的前一年的天数
{
c.year=i;
ans+=returnalldays(c);
}
ans+=returnalldays(b);//加上今年月1日到今天的天数
ans=ans%5;
if(ans>0&&ans<4)
printf("他在打鱼!n");
else
printf("他在晒网!n");
printf("是否继续?1继续 0退出n");
scanf("%d",&cho);
}
while(cho);
return 0;
}


最后

以上就是虚幻洋葱为你收集整理的打鱼还是晒网C++的全部内容,希望文章能够帮你解决打鱼还是晒网C++所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部