017 打渔晒网问题
核心算法:
所谓“三天打一次渔,两天晒一次网”,就是说2011年1月1日、2日、3日打渔,2011年1月4日、5日晒网;2011年1月6日、7日、8日打渔,2011年1月9日、10日晒网…
递归可得每五天一个循环,五天内的具体分配可通过余数来判断。
则只要计算输入的年月日距2011年1月1日的天数被5整除的余数来判断那一天是打渔还是晒网。若余数为1或2或3,则那一天打渔;若余数为0或4,则那一天晒网。
将问题进行拆分:
1、计算输入年份的1月1日距2011年1月1日有多少天
首先判断输入的年份(包括2011年)距2011年有多少年,这其中有多少年是闰年就将sum加多少个366天,有多少年是平年就将sum加上多少个365。(调用闰年判断函数leap())
2、计算输入日期是输入年份的第几天,自定义函数number()(调用闰年判断函数leap())
详情可见计算某日是该年的第几天
3、自定义函数leap()判断闰年
例:如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫是在打渔还是在晒网。
#include<stdio.h>
int leap(int year)/*自定义函数leap()用来判断输入的年份是否为闰年*/
{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;
}
int number(int year,int month,int day)/*自定义函数number()计算输入的日期是输入的年份的第几天*/
{int i,sum=0;int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(leap(year)==1)for(i=0;i<month-1;i++)sum+=a[i];elsefor(i=0;i<month-1;i++)sum+=b[i];sum+=day;return sum;
}
int main()
{int j,year,month,day,sum;printf("请输入年月日:\n");scanf("%d%d%d",&year,&month,&day);sum=number(year,month,day);for(j=2011;j<year;j++)/*判断2011年到输入的年份之间哪些年份是闰年,那些年份是平年,并加上每年的天数*/{if(leap(j)==1)sum+=366;elsesum+=365;}if((sum%5)<4&&(sum%5)>0)printf("%d年%d月%d日在打渔\n",year,month,day);elseprintf("%d年%d月%d日在晒网\n",year,month,day);return 0;
}
或者(自定义一个新函数直接判断输入日期距2011年1月1日的天数)
#include<stdio.h>
int leap(int year)/*自定义函数leap()用来判断输入的年份是否为闰年*/
{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;
}
int number(int year,int month,int day)/*自定义函数number()计算输入的日期距2011年1月1日共有多少天*/
{int i,j,sum=0;int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};/*数组a存放闰年每月的天数*/int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*数组b存放平年每月的天数*/if(leap(year)==1)/*判断是否为闰年*/for(i=0;i<month-1;i++)sum+=a[i];/*是闰年,累加数组a前m-1个月份的天数*/elsefor(i=0;i<month-1;i++)sum+=b[i];/*是平年,累加数组b前m-1个月份的天数*/ for(j=2011;j<year;j++)/*判断2011年到输入的年份之间哪些年份是闰年,那些年份是平年,并加上每年的天数*/{if(leap(j)==1)sum+=366;/2011年到输入的年份是闰年的加366*/elsesum+=365;/*2011年到输入的年份是平年的加365*/}sum+=day;/*将前面累加的结果加上日期,求出总天数*/return sum;/*返回计算的天数*/
}
int main()
{int year,month,day,sum;printf("请输入年月日:\n");scanf("%d%d%d",&year,&month,&day);sum=number(year,month,day);if((sum%5)<4&&(sum%5)>0)/*当余数是1或2或3时说明在打渔,否则在晒网*/printf("%d年%d月%d日在打渔\n",year,month,day);elseprintf("%d年%d月%d日在晒网\n",year,month,day);return 0;
}
注意:
①if和for的内外位置关系,要考虑先判断还是先循环。 ②在自定义一个函数时,若函数内用到循环结构,通常为:
for(循环变量=初值;循环变量<待从键盘输入其值的变量;循环变量自增或自减)
这里的循环变量和待从键盘输入其值的变量其实表示的是同一种物理量,但在定义时需要给出两种变量名。
017 打渔晒网问题相关推荐
- 第六天、打渔晒网问题
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫是在打渔还是在晒网. C代码: /*第六天.打渔晒网问题*/ #includ ...
- 打渔晒网问题(难度:1颗星)
问题描述: 如果1个渔夫从2011年1月1日开始每3天打一次渔,两天晒一次网,编程实现当输入2011年1月1日之后的任意1天,输出该渔夫是在打渔还是在晒网. 输入样例 2011 5 5 输出样例 晒网 ...
- 题目:中国有句俗话叫“三天打渔,两天晒网”,某人从2010年1月1日期开始“三天打渔,两天晒网” 问这个人在以后的某一天是“打渔”还是“晒网”。用C或着C++语言实现程序解决问题。
一:题目:中国有句俗话叫"三天打渔,两天晒网",某人从2010年1月1日期开始"三天打渔,两天晒网" 问这个人在以后的某一天是"打渔"还是& ...
- 中国有句俗语叫“三天打鱼两天晒网”,某人从90年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天中是在“打渔”,还是在“晒网”(数组,循环,函数)
中国有句俗语叫"三天打鱼两天晒网",某人从90年1月1日起开始"三天打鱼两天晒网".问这个人在以后的某一天中是在"打渔",还是在" ...
- 【练习题+1】某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网。
刚刚开始学习,在题库里面抽到这一题. 某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网. 一个男孩工作3天,而请假2天.如果他在1990 ...
- 一星级挑战:09 打渔还是晒网
打渔还是晒网 题目描述 有句俗话叫"三天打渔,两天晒网".如果小爱前三天打渔,后两天晒网,一直重复这个过程,那么在第 n n n天,她是在打渔还是晒网呢? 输入格式 单个整数表示 ...
- 中国有句俗语叫“三天打鱼两天晒网”,某人从90年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天中是在“打渔”,还是在“晒网”. **输入格式要求:“%d%d%d“ 提示信息:“Enter
中国有句俗语叫"三天打鱼两天晒网",某人从90年1月1日起开始"三天打鱼两天晒网".问这个人在以后的某一天中是在"打渔",还是在" ...
- JavaScript网页特效-“渔夫打鱼晒网”程序设计
程序设计时,把可能需要反复执行的代码封装为函数,然后在需要执行该段代码功能的地方进行调用,这样不仅可以实现代码的复用,更重要的是可以保证代码的一致性,只需要修改该函数代码,则所有调用位置均得到体现.同 ...
- python练习, 打鱼晒网问题
如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网. import time # 判断是 ...
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
问题描述:中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&q ...
最新文章
- 人脸检测--S3FD: Single Shot Scale-invariant Face Detector
- OSChina 周日乱弹 —— 来和养生的技术负责人决斗!
- html footer 布局,详解CSS经典布局之Sticky footer布局
- 快快: 一点即玩的游戏客户端平台
- Leetcode 210. 课程表 II 解题思路及C++实现
- 审计文件的作用以及记录的内容,审计日志的记录,以及审计日志包括的内容
- word2vec的通俗理解
- Java序列化报错serialVersionUID不一致
- 计算机网络课程设计之网络代理服务器的设计与实现
- idea2020.1使用Lombok注解,点击运行项目提示找不到get,set方法?
- 设计没灵感,哪些网站可以参考?
- [转]IE首页被http://www.9798.net/篡改解决办法
- pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
- 求两个列表的交集、并集和补集
- 用C++实现生产者-消费者问题模型
- 说说自己工作中的测试流程
- (1)输入直角三角形的两个直角边的长度a,b,求斜边c的长度 (2) 编写一个程序,用于两个数的交换
- uint8数据类型图片和double数据类型图片的转化和显示
- 综述文章:支持自闭症谱系障碍青少年灵活认知和行为的大脑机制
- 用endnote9往word中插入参考文献