加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

三天打鱼两天晒网——C语言

发布时间:2020-12-15 04:48:56 所属栏目:百科 来源:网络整理
导读:题目: 中国有句俗语:“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天是在“打鱼”还是在“晒网”? 思路: 首先求出从1990年1月1日到指定日期之间经过的天数; 经分析,打鱼晒网是5天一轮回,所以用天数对5

题目:

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

思路:

首先求出从1990年1月1日到指定日期之间经过的天数;

经分析,打鱼晒网是5天一轮回,所以用天数对5取余来判断打鱼还是晒网。

具体解释:

观察发现,打鱼晒网是5天一个轮回,前三天打鱼,后两天晒网

由此可以利用经过的总天数对5取余的方式来判断打鱼还是晒网;

经分析:取余结果为1、2、3时打鱼,结果为0或4时为晒网

因此需要求出指定的某一天到1990年1月1日期间共有多少天;

平年闰年分情况讨论,能被4整除但不能被100整除能被400整除的年份为闰年,有366天,其余为平年,为365天;

求天数时将整年和非整年单独处理:整年直接天数增加366或365;非整年则根据月数以及日期利用循环来求出具体天数;

将平年闰年两种年的每月天数分别存储进数组,用来解决不是整年的剩余天数;

最后根据之前的分析,取余求出结果。

注:还应当对用户输入的日期进行合法判断,例如平年2月没29号、4月没31号等。

代码:

#include

#include

#define YEAR 1990 //宏定义初始年月日

#define MONTH 1

#define DAY 1

/*

三天打鱼两天晒网

题目:

中国有句俗语:“三天打鱼两天晒网”,

某人从1990年1月1日起开始“三天打鱼两天晒网”。

问这个人在以后的某一天是在“打鱼”还是在“晒网”?

*/

int Input(); //录入数据并判断是否合法

int Days(int,int,int); //求期间的天数,参数为年月日

int Days(int year,int month,int day)

{

int days = 0; //期间共有多少天

int days_tmp = 0; //不满一年的整月天数

int ping_nian[] = {31,28,31,30,31};

int run_nian[] = {31,29,31};

int i = 0;

int j = 0;

for(i = YEAR; i <= year; i++) //遍历每一年

{

if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) //判断闰年

{

if((year - i) != 0) //判断是否为完整的一年

days += 366;

else

{

for(j = 0; j < month - MONTH; j++)

days_tmp += run_nian[j];

days += days_tmp + day;

}

}

else

{

if((year - i) != 0) //判断是否为完整的一年

days += 365;

else

{

for(j = 0; j < month - MONTH; j++)

days_tmp += ping_nian[j];

days += days_tmp + day;

}

}

}

return days;

}

int Input()

{

int days = 0,//从始至终的总天数

year = 0,

month = 0,

day = 0;

int num = 0;

printf("t输入一个1990年包括1月1日之后的日期nn");

printf("输入年月日(逗号隔开):");

while(1) //录入数据并判断是否合法

{

scanf("%d,%d,%d",&year,&month,&day);

if(year >= YEAR && month >= 1 && month <= 12) //判断年月

{

if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)

{

if(day >= 1 && day <= 31) //大月天数是否合法

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin); //清空缓存区

}

}

else if(month == 2) //2月天数是否合法

{

if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //闰年

{

if(day >= 1 && day <= 29)

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

else

{

if(day >= 1 && day <= 28)

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

}

else if(day >= 1 && day <= 30) //小月天数是否合法

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

days = Days(year,month,day); //调用求天数的函数

return days; //返回天数

}

int main()

{

int days = 0; //从始至终的总天数

days = Input(); //调用函数

if((days % 5 == 4) || (days % 5 == 0)) //利用取余判断打鱼还是晒网

printf("这一天晒网");

else

printf("这一天打鱼");

return 0;

}

运行结果:

测试3组数据:


1、1990年1月3日——打鱼;


2、1990年1月4日——晒网;


3、2018年11月11日——打鱼。(先输入非法日期进行数据录入判断测试)



**

程序练习,仅为一种思路,若有错误请指出。

**

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读