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语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网相关推荐

  1. 三天打鱼两天晒网的c语言程序,回归经典之C语言《三天打鱼两天晒网》

    //一个人从2000年1月1日开始三天打鱼两天晒网,用户输入一个日期,判断该人这天在打鱼还是晒网 #include void input(); void sum(int y,int m,int d); ...

  2. C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网

    满意答案 dmmk2822 2018.11.05 采纳率:46%    等级:6 已帮助:160人 中国有句俗语叫 "三天打鱼两天晒网 ".某人从 1990年 1月 1日起开始&q ...

  3. 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题

    /* 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网", 问这个人在以后的某一天中是"打鱼"还是&qu ...

  4. 中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?

    在线问题 中国有句俗语叫"三天打鱼两天晒网".如果从1990年1月1日起开始执行"三天打鱼两天晒网".如何判断在以后的某一天中是"打鱼"还是 ...

  5. JAVA判断输入日期是否合法

    简单判断输入日期是否合法 运行结果: public class JudgeDate {public static boolean judge(int y,int m,int d) {boolean p ...

  6. 03【C语言 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

    目录 一.指路哦 三.打鱼还是晒网 嘞? 3.1 问题描述 3.2 问题分析 3.3 算法设计 3.4 确定程序框架 3.5 求出指定日期距 1990年1月1日的天数 3.6 完整code 及结果 一 ...

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

    此题目难度不大,主要难度在于所给日期闰年判定以及经过的年份中闰年的个数问题, 对于输入日期的中日正确性判断,只需建立对应月份天数的数组即可判断.求出所给年份到初始年份经过的天数后对五取余判定是否大于三 ...

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

    已经实现的功能: 从键盘输入指定的年.月.日: 计算从2010年1月1日至指定日期共有多少天: 由于"打鱼"和"晒网"的周期为5天,所以将计算出的天数用5去除. ...

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

    问题描述:中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&q ...

  10. 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。

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

最新文章

  1. 遍历二叉树的神级方法(Morris)
  2. 定义一个大整数类,并重载乘法*运算符
  3. 【码农本色】用数据解读我的2014
  4. 在linux、optee、ATF中的中断异常向量表
  5. a说b说谎b说c说谎说d说_说谎的眼睛及其同伙
  6. Objective-C模版方法(TemplateMethod)
  7. [转]mysql慢查询日志
  8. 史上最强Dubbo面试26题和答案:核心组件+服务治理+架构设计等
  9. 详细名单:Google的581个域名
  10. 游戏十五大基本游戏类型介绍
  11. IPV6电视播放器V1.0.3
  12. caffe最优化方法
  13. 工业防腐漆的作用,你知道的有几个
  14. Python挑战游戏( PythonChallenge)闯关之路Level- 3
  15. 微信小程序 - 日期(起止)选择器组件
  16. 【软件设计】如何画时序图
  17. idea中字体大小以及注释的颜色设置
  18. AWS - Redshift - Unload 数据到S3产生的文件名
  19. 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...
  20. git config本地信息配置

热门文章

  1. Windows中的用户和组以及用户密码处理
  2. app源码 php,PHP大型B2B2C商城源码带APP源码
  3. win10 升级出现0x80004002
  4. 有符号二进制加法溢出判断以及溢出后该如何计算正确答案
  5. 软件工程毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  6. 算法竞赛入门经典第二版 2-6排列
  7. uci数据集汇总及翻译
  8. eterm 350转443转接器
  9. 怎么把度分秒化成小数_角度的度分秒与小数点格式互相转换
  10. java中visio的作用_Visio软件的概念、用途与特色是什么?