C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网
C语言打鱼晒网问题
问题描述
中国有句俗语:“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天是在“打鱼”还是在“晒网”?
分析问题
输入部分:
很明显,该题目需要我们输入需要判断打鱼还是晒网的年,月,日。
那么,我们至少需要三个整型变量:year, month, day。
输出部分:
题目只要求判断这个人是在打鱼还是晒网。
由此,我们可知该题目可以通过得出总的时间跨度,然后判断我们输入的日期在打鱼期还是晒网期。
功能实现:
首先我们需要计算总的时间跨度,然后利用求余判断输入的日期所在的阶段。
所以,我们还需要一个存放总体时间跨度的整型变量:time。
而年份有闰年平年,月份有30, 28, 29, 31天,所以需要分情况讨论:闰年/平年,月份。
综上,问题解决框架已经清晰,开始编写代码:
#include<stdio.h>
/*兔子骑士叫旺仔原创*/
main()
{/*year:年份 month:月份 day:号 time:时间跨度 */int year, month, day, time, i;/*每月的天数*/int each_month[12] = {31, 29, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31};scanf("%d-%d-%d", &year, &month, &day);time = 0;/*整年计算天数*/for(i = 1990; i < year; i++){if((i % 400 == 0) || (i % 4 == 0) && (i % 100 != 0)){time += 366;}else{time += 365;}}/*判断闰年,闰年2月有29天,每月的天数不做更改*/if((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)){/*月份大于2月,依次加上每个月的天数*/ if(month > 2){for(i = 0; i < (month - 1) ; i++){time += each_month[i];}/*加上几号*/ time += day;}/*月份小于2月,就只有1月,直接加上几号即可*/else if(month < 2){time += day;}/*正好2月,加上1月份的31天和2月份的号数*/else{time = time + 31 + day;}}/*平年情况*/else{/*更改平年2月份天数为28天*/each_month[1] = 28;/*同闰年部分*/if(month > 2){for(i = 0; i < (month - 1) ; i++){time += each_month[i];}time += day;}else if(month < 2){time += day;}else{time = time + 31 + day;} }/*判断处于打鱼日还是晒网日*/if(0 < (time % 5) && (time % 5) < 4)printf("他在打鱼");elseprintf("他在晒网");
}
需注意在我的代码中所编写的输入格式
运行结果截图
结束(改进建议)
该代码还是有些麻烦,不难发现在闰年部分和平年部分的天数计算是重复的,可以把该部分代码用自定义函数来实现,该函数可以用来计算输入的日期在该年已经经过的天数,然后直接加上整年数同样可得出经过的时间跨度。
当然,工具是死的,人是灵活的,肯定还有不同的解法,我的肯定也不是最优解,希望各位多交流,共同进步。谢谢。
C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网相关推荐
- 三天打鱼两天晒网的c语言程序,回归经典之C语言《三天打鱼两天晒网》
//一个人从2000年1月1日开始三天打鱼两天晒网,用户输入一个日期,判断该人这天在打鱼还是晒网 #include void input(); void sum(int y,int m,int d); ...
- C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网
满意答案 dmmk2822 2018.11.05 采纳率:46% 等级:6 已帮助:160人 中国有句俗语叫 "三天打鱼两天晒网 ".某人从 1990年 1月 1日起开始&q ...
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题
/* 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网", 问这个人在以后的某一天中是"打鱼"还是&qu ...
- 中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?
在线问题 中国有句俗语叫"三天打鱼两天晒网".如果从1990年1月1日起开始执行"三天打鱼两天晒网".如何判断在以后的某一天中是"打鱼"还是 ...
- JAVA判断输入日期是否合法
简单判断输入日期是否合法 运行结果: public class JudgeDate {public static boolean judge(int y,int m,int d) {boolean p ...
- 03【C语言 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
目录 一.指路哦 三.打鱼还是晒网 嘞? 3.1 问题描述 3.2 问题分析 3.3 算法设计 3.4 确定程序框架 3.5 求出指定日期距 1990年1月1日的天数 3.6 完整code 及结果 一 ...
- 中国有句俗语叫“三天打鱼两天晒网”。 某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”
此题目难度不大,主要难度在于所给日期闰年判定以及经过的年份中闰年的个数问题, 对于输入日期的中日正确性判断,只需建立对应月份天数的数组即可判断.求出所给年份到初始年份经过的天数后对五取余判定是否大于三 ...
- Java---中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
已经实现的功能: 从键盘输入指定的年.月.日: 计算从2010年1月1日至指定日期共有多少天: 由于"打鱼"和"晒网"的周期为5天,所以将计算出的天数用5去除. ...
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
问题描述:中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&q ...
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。
一丶中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是" ...
最新文章
- 遍历二叉树的神级方法(Morris)
- 定义一个大整数类,并重载乘法*运算符
- 【码农本色】用数据解读我的2014
- 在linux、optee、ATF中的中断异常向量表
- a说b说谎b说c说谎说d说_说谎的眼睛及其同伙
- Objective-C模版方法(TemplateMethod)
- [转]mysql慢查询日志
- 史上最强Dubbo面试26题和答案:核心组件+服务治理+架构设计等
- 详细名单:Google的581个域名
- 游戏十五大基本游戏类型介绍
- IPV6电视播放器V1.0.3
- caffe最优化方法
- 工业防腐漆的作用,你知道的有几个
- Python挑战游戏( PythonChallenge)闯关之路Level- 3
- 微信小程序 - 日期(起止)选择器组件
- 【软件设计】如何画时序图
- idea中字体大小以及注释的颜色设置
- AWS - Redshift - Unload 数据到S3产生的文件名
- 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...
- git config本地信息配置