基础学习——C语言递归解决分鱼问题

如有小伙伴想学习C语言基础,可以进群731871503进行交流学习,提升编程,共同进步

问题描述

A、B、C、D、E这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B第二个醒来,但不知道A已经拿走了一份鱼,于是他将剩下的鱼平分为5份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?

在这里插入图片描述

问题分析

假设5个人合伙捕了x条鱼,则“A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了”之后,还剩下4(x-1)/5条鱼。

这里实际包含了一个隐含条件:假设Xn为第n(n=1、2、3、4、5)个人分鱼前鱼的总数,则(Xn-1)/5必须为正整数,否则不合题意。(Xn-1)/5为正整数即(X〜l)mod5=0必须成立。

又根据题意,应该有下面等式:

X4=4(X5-1)/5
X3=4(X4-1)/5
X2-4(X3-1)/5
X1=4(X2-1)/5

则一旦给定X5,就可以依次推算出X4、X3、X2和X1的值。要保证X5、X4、X3、X2和X1都满足条件(Xn-1)mod5=0,此时的X5则为5个人合伙捕到的鱼的总条数。显然,5个人合伙可能捕到的鱼的条数并不唯一,但题目中强调了 “至少”合伙捕到的鱼,此时题目的答案唯一。该问题可使用递归的方法求解。

程序设计

在main()函数中构建一个不定次数的do-while循环。定义变量x表示5个人合伙可能捕到的鱼的条数,可以取x的最小值为6,让x值逐渐增加,x每一次取值,都增加5,直到找到一个符合问题要求的答案。由于题目中问“这5人至少合伙捕到多少条鱼”,而我找到的第一个x值就是5个人至少捕到的鱼的总条数。

通过这个循环,就可以对每一个的可能情况进行检查。当然,是通过调用分鱼的递归函数来进行检查的。

分鱼的递归函数如下:

fish()函数中包含了两个参数:n和x。n表示参与分鱼的人数,x表示n个人分鱼前鱼的总条数。这两个参数都是由main()函数中传递进来的。

根据前面的分析,当n=5时,(x-1)mod5==0必须成立,否则该x值不是满足题意的值,退出fish()函数,返回到main()函数,main()函数中再传递新的x值到fish中进行检验。

如果(x-1)mod50条件成立,则要判断n=4时,(x-1)mod5=0条件是否成立,需要注意的是,此时的形参x是4个人分鱼前鱼的总条数,即f(5,x)递归调用f(4,(x-1)/5*4)。这样依次进行下去,直到n=1时,(x-1)mod50条件仍成立,则说明开始从main()函数中传递进来的x值是符合题意要求的一个值,可以逐层从递归函数中返回,每次返回值都为1,直至返回到main()函数。

下面是完整的代码:

#include<stdio.h>

/分鱼递归函数/

int fish(int n, int x)

{

if((x-1)%5 == 0)

{

if(n == 1)

return 1; /递归出口/

else

return fish(n-1, (x-1)/5*4); /递归调用/

}

return 0; /x不是符合题意的解,返回0/

}

int main()

{

int i=0, flag=0, x;

do

{

i=i+1;

x=i*5+1; /x最小值为6,以后每次增加5/

if(fish(5, x)) /将x传入分鱼递归函数进行检验/

{

flag=1; /找到第一个符合题意的x则置标志位为1/

printf(“五个人合伙捕到的鱼总数为%d\n”, x);

}

}

while(!flag); /未找到符合题意的x,继续循环,否则退出循环/

return 0;

}

运行结果:

五个人合伙捕到的鱼总数为3121

知识点补充

本题还可以使用“递推法”来求解。下面先对递推法做下简介。

递推法:利用问题本身所具有的递推关系来求解。所谓的递推关系指的是:当得到问题规模为n-1的解后,可以得出问题规模为n的解。因此,从规模为0或1的解可以依次递推出任意规模的解。

下面是完整的代码:

#include<stdio.h>

/分鱼递归函数/

int fish(int n, int x)

{

if((x-1)%5 == 0)

{

if(n==1)

return 1; /递归出口/

else

return fish(n-1, (x-1)/5*4); /递归调用/

}

return 0; /x不是符合题意的解,返回0/

}

int main()

{

int fish[6], i;

fish[5]=6;

while(1)

{

for(i=4; i>0; i–)

{

if(fish[i+1]%4!=0)

break;

fish[i]=fish[i+1]*5/4+1;

if(fish[i]%5!=1)

break;

}

if(i == 0)

break;

fish[5]+=5;

}

for(i=1; i<=5; i++)

printf(“fish[%d]=%d\n”, i, fish[i]);

return 0;

}

运行结果:
fish[1]=3121
fish[2]=2496
fish[3]=1996
fish[4]=1596
fish[5]=1276

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python定位元素在列表中的位置_python定位列表元素

Python 列表&#xff08;list&#xff09;提供了 index() 和 count() 方法&#xff0c;它们都可以用来查找元素。 index() 方法 index() 方法用来查找某个元素在列表中出现的位置&#xff08;也就是索引&#xff09;&#xff0c;如果该元素不存在&#xff0c;则会导致 ValueErr…

Java学习4大阶段完成入门,小白必读!

Java 的学习过程分为4个阶段&#xff1a; 理论阶段 开发阶段 进阶阶段 实战阶段 理论阶段 在具体谈论Java知识点之前&#xff0c;我想先跟同学们聊聊Java 语言自身的一些特点、生态系统以及适用的场景&#xff0c;这有助于我们更好的学习语言本身。 首先&#xff0c;我们…

memkind版本查看_不同价位值得买轻薄本推荐~2020国庆篇

说起轻薄本&#xff0c;你理想中的一台优秀机型是什么样的&#xff1f;轻薄便携、质感上乘、高颜值、逼格、手感佳、续航持久、屏幕素质高、独立小键盘、性能激进……和游戏本的鲜明对比&#xff0c;注定了是两种不同的“菜”。2020年&#xff0c;随着AMD的崛起&#xff0c;部分…

main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...

# 需求升级在上篇博客《一对多的关系&#xff0c;在MyBatis中如何映射&#xff1f;》中&#xff0c;我们实现了需求&#xff1a;根据用户id查询用户信息的同时获取用户拥有的角色。因为角色可以拥有多个权限&#xff0c;所以本篇博客我们升级需求为&#xff1a;根据用户id查询用…

movielens推荐系统_案例|推荐系统的评估指标

推荐系统能够为用户提供个性化体验&#xff0c;现在基本上各大电商平台、资讯平台都会用推荐系统为自家评价下的用户提供千人千面的服务。平均精度均值&#xff08;Mean Average Precision&#xff0c;MAP&#xff09;便是评估推荐系统性能的度量标准之一。但是&#xff0c;使用…

mysql群集配置_CentOS7 - 建立一个MySQL集群

Standing up a MySQL cluster此配方将指导您完成设置MySQL群集的过程。 通过跨多个系统划分数据并维护副本以避免单点故障&#xff0c;群集数据库可以应对可伸缩性和高可用性的挑战。集群的成员称为节点。 MySQL集群中有三种节点类型&#xff1a;数据节点&#xff0c;API节点和…

叮!您收到一份超值Java基础入门资料!

Java语言有什么特点&#xff1f;如何最大效率的学习&#xff1f;深浅拷贝到底有何区别&#xff1f;阿里巴巴高级开发工程师为大家带来Java系统解读&#xff0c;带你掌握Java技术要领&#xff0c;突破重点难点&#xff0c;入门面向对象编程&#xff0c;以详细示例带领大家Java基…

python适用的操作系统是_操作系统先来先服务python

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #codingutf-8 import __main__ import string def fcfs ( come_time , run_b_t , run_e_t , run_t , order ): # 先来先服务 time_tempcome_time [ 0 ] for i in range ( n ): run_b_t [ i …

jop怎么读音英语怎么说_“春晚”英语怎么说?

大家都说近年来的春节年味越来越淡&#xff0c;每年陪老人一起看春晚、上网吐槽春晚&#xff0c;应该算是最有年味的一件事了吧&#xff01;你期待今年的春晚吗&#xff1f;在春晚即将开播之际&#xff0c;先和我一起了解一些有关“春晚”的英语知识吧&#xff01;01、“春晚”…

2019 年软件开发人员必学的编程语言 Top 3

这篇文章将探讨编程语言世界的现在和未来&#xff0c;这些语言让新一代软件开发者成为这个数字世界的关键参与者&#xff0c;他们让这个世界变得更健壮、连接更加紧密和更有意义。开发者要想在 2019 年脱颖而出&#xff0c;这三门语言一定要关注。 作为软件开发者&#xff0c;…

python产生随机数random.random_Python内置random模块生成随机数的方法

本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法。 随机数参与的应用场景大家一定不会陌生&#xff0c;比如密码加盐时会在原密码上关联一串随机数&#xff0c;蒙特卡洛算法会通过随机数采样等等。Python内置的random模块提供了生成随机数的方法&#xff0c;使用这…

数据仓库—stg层_数据仓库之Hive快速入门 - 离线实时数仓架构

数据仓库VS数据库数据仓库的定义:数据仓库是将多个数据源的数据经过ETL(Extract(抽取)、Transform(转换)、Load(加载))理之后&#xff0c;按照一定的主题集成起来提供决策支持和联机分析应用的结构化数据环境数据仓库VS数据库&#xff1a;数据库是面向事务的设计&#xff0c;数…

小数据量计算最大lyapunov代码_Software | 计算Lyapunov指数的GUI工具箱及函数包汇总...

二十年前读书时用过的Lyapunov Exponents Toolbox&#xff0c;推荐给做非线性动力学入门的同学们。那个时候不会编写程序&#xff0c;做分支图、算连续或者离散系统的Lyapunov指数&#xff0c;极其困难&#xff0c;还好有这个工具箱&#xff0c;慢慢看源程序学会写一点改进的程…

零基础学习C语言如何入门(内附工具书推荐+视频教程)

C语言同C、Python等都是通用性的编程语言&#xff0c;它们不针对某一个特定的方向&#xff0c;能做的事情很多。C语言主要用于底层开发&#xff0c;Windows、Linux、Unix 等操作系统的内核90%以上都使用C语言开发&#xff0c;开发硬件驱动&#xff0c;让硬件和操作系统连接起来…

git 小乌龟 更新分支_git常用操作

Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方式&a…

web 服务器 内存 影响_C/C++服务器开发常用的7大开源库,让你在同行中脱颖而出...

C/C服务器开发7大常用开源库&#xff0c;在这里简单介绍一下。1、OpenSSLOpenSSL是一个开放源代码的安全套接字层密码软件库&#xff0c;囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议&#xff0c;应用程序可以使用这个包来进行安全通信&#xff0c;避免窃听&…

pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...

此系列文章收录在公众号中&#xff1a;数据大宇宙 > 数据处理 >E-pd转发本文并私信我"python"&#xff0c;即可获得Python资料以及更多系列文章(持续更新的)经常听别人说 Python 在数据领域有多厉害&#xff0c;结果学了很长时间&#xff0c;连数据处理都麻烦得…

opencv python轻松入门_OpenCV轻松入门 面向Python

章OPENCV入门1 1.1如何使用1 1.2图像处理基本操作3 1.2.1读取图像3 1.2.2显示图像5 1.2.3保存图像9 1.3OpenCV贡献库10 第2章图像处理基础11 2.1图像的基本表示方法11 2.2像素处理15 2.3使用numpy.array访问像素23 2.4感兴趣区域(ROI)29 2.5通道操作32 2.5.1通道拆分32 2.5.2通…

产生式是蕴含式_独栋别墅~下沉式庭院设计

遇见美. 发现美创造美. 成就美有趣、有情奢享生活.创艺空间设计项目概述&#xff1a;这是一套婚房&#xff0c;从设计到装修完毕&#xff0c;历经三年。这是一生幸福开启的地方。一层为会客厅、室内花园、餐厅、茶室、老人房。原始房屋整体空间不够方正&#xff0c;空间利用率低…

在前端中如何在表格中最后一行加入输入框_UI设计进阶干货 — 如何制定UI规范...

APP为何要制定设计规范作为UI设计师&#xff0c;整理设计规范也是设计能力的一种体现。但很多小公司的设计师都觉得, 整个公司只有自己一个设计师, 所有的设计稿都是自己一个人做的, 风格肯定都是统一的, 所以没必要花那么长时间去做一个没有用的东西。但其实规范的本身并不是只…