python学习-综合练习五(五人分鱼(优化解)、顺向、反向推导)

Python五人分鱼 让鱼的总数 fish 从 1 开始递增,当 fish 的数量可以满足无论分鱼分配规则,那么这个 fish 值就是合伙捕鱼的最小值。 阅读详情


说明:本篇博文的知识点大部分来自 Python3 实例

五人分鱼


# A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
# 日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
# B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
# C、D、E依次醒来,也按同样的方法拿鱼。
# 问他们台伙至少捕了多少条鱼?

题干分析:
拿到这种题,如果手动计算,首先想到的是列方程,求解。但是在程序中,那我们能做的其实就是控制循环,然后不断的进行遍历,选出符合条件的数值。
比如这道题,其实有两条思路,第一条思路是顺推,按照A->E的顺序拿鱼。第二条思路就是反推,按照E->A的顺序拿鱼计算。

顺推

主要是理清思路比较麻烦,代码还是挺简单的。
控制一个循环,不断让数值fish +=1,然后循环里面一个for去判断5次,每次都是fish -1对5取余等于0。找到这个数,跳出循环,打印出来的数值就是我们需要的数值。
然后我们遍历,并不是每一个数值都要去遍历,我们只对 (total - 1) % 5 == 0 的数值去进行计算,即在循环里面,可以直接使用 idx * 5 + 1之后的fish进行计算。
·
减少了循环次数,使用传统方式,每个idx进行计算,遍历了3121次,而使用处理后的fish进行计算,只循环了624次。
·
由此可见,如果循环里面是复杂计算,这个耗时差距就会很大了。
下面看代码:


def countFish():
    idx = 0
    while True:
        fish = idx * 5 + 1
        total, enough = fish, True
        for _ in range(5):
            if (total - 1) % 5 == 0:
                total = (total - 1) // 5 * 4
                # print(total)
            else:
                enough = False
                break
        if enough:
            print(f'总共有{fish}条鱼')
            break
        idx += 1
        print(idx)


countFish()

运行结果:
在这里插入图片描述

反推

这种题还有一种反向思维,即从最后一个人能分到的最少鱼数,反向推导。
但是我写了一段代码,运行处理结果不对,我还需要调试一下。等我调试好,再把这里补充完整,如果有看到此部分,然后对反向推导有兴趣的小伙伴,可以把代码贴到评论区噢。

在此对文章内容进行补充:
参考文章为:
创新工厂面试题详解:共打了多少鱼 – 正解 递归求解法

这里有很多干货,并且针对这道题,有一句话很重要:
这道题有简单的数学解: X = 5^5 - (5-1);
这个确实很有意思,大家思考一下噢。

2023年12月GESP Python三、四级编程题真题解析 本篇对2023年12月GESP Python三、四级编程题真题进行了比较详细的解析,在分析上不上的基础上给出编程思路,然后给出了完整的程序代码和运行结果,“田忌赛马”这题还给出了比赛方案。 阅读详情

相关推荐

直流并联电压源的下垂控制与模拟光伏板特性的方法与仿真

并联直流电源下垂控制方法,下垂特性可以让并联直流电源输出功率/电流自动均衡,直流电源输出特性模拟光伏板的输出特性,具有自动限制输出最大功率的功能

1197

100个python算法超详细讲解:递归解决分鱼问题

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

Lee达森的博客 3277

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 642

五人分鱼python_Python经典五人分鱼实例讲解

A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。Qw1免费资源网日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。Qw1免费资源网B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。Qw1免费资源网C、D、E依次醒来,也按同样的方法拿鱼。Qw1免费资源网问他们至少捕了多少条鱼?Qw1免费资源网def main...

weixin_42511373的博客 1085

会计引擎:交易与核算分离的前世今生

一、为什么需要会计引擎 金融产品的设计,一如一块硬币需要兼顾两面:一面是为客户提供好的金融服务,满足客户支付结算、借贷、资产保值增值等方面的需求,并在这个过程中,以数字化的方式做好客户资产的登记,登记的载体,则是“分户”或“台账”,如客户存款户,是一种典型的分户--资金的增减变化都在一个账户中进行体现,而客户购买的银行理财,因为收益率、期限、投资标的不同,每一笔持有就形成一行记录,即为“台账”--这当然是不严谨但相对形象的表述。但是,“分户”和“台账”并没有必然的区别,以贷款为例,一些银行仍然存在所谓“

银行信息系统应用架构详解 983

配置某VLAN下ONU的二层互访(隔离)问题(解决OLT二层隔离问题)

问题:OLT的ONU节点之间在同一VLAN下的终端默认隔离,在确实需要互通的场景下如何解决。

symstandsun的博客 4564

每日一练:“五人分鱼”问题

A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。。C、D、E依次醒来,也按同样的方法拿鱼。问他们至少捕了多少条鱼?

Snailandfish的专栏 2145

游戏客户端开发工程师笔试题

1、已知有一个关键字序列:(27,23,34,14,1,55, 20,19,85,83,10,68)散列存储在一个哈希表中,若散列函数为H(key)=key%7,并采用链地址法来解决冲突,则在等概率情况下查找成功的平均查找长度为(4、出现死锁时,除了可以采用资源剥夺的方法解决死锁问题外,还可以使用的方法是()是被限定只能在表的一端进行插入运算,在另一端进行删除运算的线性表.5、大端模式,是指数据的高字节保存在内存的(3、在二叉查找树中, 最好情况下复杂度为。)地址中,而数据的低字节保存在内存的(

博客 1873

python求多元线性回归方程_Python----多元线性回归

多元线性回归1、多元线性回归方程和简单线性回归方程类似,不同的是由于因变量个数的增加,求取参数的个数也相应增加,推导和求取过程也不一样。、y=β0+β1x1+β2x2+ ... +βpxp+ε对于b0、b1、…、bn的推导和求取过程,引用一个第三方库进行计算2、应用多元线性回归的几个限定条件(1)Linearity 线性(2)Homoscedasticity 同方差性(3)Multivariat...

weixin_39880623的博客 2690

智慧社区:安防系统解决方案

智慧社区:安防系统解决方案

s13166803785的博客 431

模型压缩技术:剪枝、量化与知识蒸馏实战

模型压缩技术:剪枝、量化与知识蒸馏实战,在深度学习领域,模型的性能往往与模型的规模紧密相关,更大的模型通常能学习到更复杂的模式,从而在任务中取得更好的效果。然而,随着模型规模的不断增大,其在实际应用中面临着诸多挑战,如内存占用高、计算资源需求大、推理速度慢等问题,这使得在资源受限的设备(如移动设备、嵌入式设备)上部署变得困难重重。模型压缩技术应运而生,它旨在在尽可能保持模型性能的前提下,通过各种方法减少模型的参数数量和计算量,提高模型的效率和可部署性。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 5万+

Python字典双向查找:从键到值与从值到键的完整指南

在Python编程中,字典(dict)作为核心数据结构,其基于哈希表的键值对映射机制提供了O(1)时间复杂度的快速正向查找,这是处理关联数据的基石。理解其底层原理有助于优化数据检索性能,尤其在配置管理、缓存系统和数据索引等应用场景中。然而,实际开发中常需通过值反向查找对应键,这涉及线性扫描或构建反向索引的策略选择。本文聚焦字典的正反向查找技巧,涵盖get()方法、setdefault操作以及通过列表推导式和反向字典实现高效值找键的方案,并结合collections模块工具,帮助开发者在查询效率、内存开销与维

weixin_34138056的博客 279

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

机器学习之贝叶斯网络

原文作者:T2噬菌体 署名:张洋 链接:http://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html 2.1、摘要       在上一篇文章中我们讨论了朴素贝叶斯分类。朴素贝叶斯分类有一个限制条件,就是特征属性必须有条件独立或基本独立(实际上在现实应用中几乎不可能做到完全独立)。当这个条件成立时,朴素贝叶斯

dahuacai的专栏 4902

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python 分鱼问题

整理以备日后回顾 A、B、C、D、E 5 个人捕 ???? ,后疲惫不堪,睡着了。第二天,A 第一个醒来,他将 ???? 平分为 5 份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B 第二个醒来,但不知道 A 已经拿走了一份 ???? ,于是他将剩下的 ???? 平分为 5 份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分 ???? 。 问这5人至少合伙捕到多少条 ???? i ...

welcome 1848

五人分鱼--基于python3.0

A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。 日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。 B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。 C、D、E依次醒来,也按同样的方法拿鱼。 问他们至少捕了多少条鱼? 问题分析: 每个人按照以下规则分鱼并拿走自己的那一份: A:(x-1)/5 B:(x-((x-1)/5)-1)/5 C:(x-((x-1)/5)-((x-((x-1)/5)-1)/5)

子邦的博客 423

五人分鱼问题递归python实现

我们都知道,要想使用递归来做题要么知道头,要么知道尾,这里的头我们不可能知道,因为题目就要求求一开始的总数,那么只能从尾下手,大部分同学可能会认为最终只剩写一条,因为题目要求的是最少,实则不然,如果只有一条,那么倒数第二个人的鱼数应该为:1/(4/5)+1=2.25结果显然不对。因为不可以存在小数。此时如果想要知道第倒数二个人有多少鱼,就应该确保(倒数第一-1)*0.8后为整数,那我们一个个前推发现,满足这个条件的有6,11…发现都是5的倍数+1。

lsj7355608的博客 541

python案例——函数递归案例

对常见的递归问题运用python语言进行分析

weixin_43318393的博客 1万+

python常见递归题练习

递归是指一个函数在执行过程中不断调用自身,直至满足某个条件退出。在Python中,递归函数需要包含一个基本情况,即退出条件,否则会一直调用自身导致无限循环。递归函数可以用于解决某些问题,比如遍历树或搜索算法。然而,递归函数可能会导致栈溢出或效率低下。因此,在使用递归函数时需要小心并特别注意。

华数云图小分队的博客 4610

菜鸟教程的五人分鱼问题

我觉得有逻辑错误,一开始将total=fish设置为1,进入循环后,第一个循环total变成0,enough也还是True,直接就输出了,接下来就一直循环输出”共有1条鱼“。for _ in range(4): # 进行4轮分鱼的过程,第五次分配用于判断是否得到正确的total。在使用菜鸟教程学习python的过程中,遇到五人分鱼的问题,给的代码示例是错误的,不能解决问题。if (total - 1) % 5 == 0: # 判断能否进行第五次分配。

Capta100的博客 671

利用Python语言解决分鱼问题

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

Moniicoo的博客 3240

python有五个人坐在一起_五个人共用一条python,Python,五人,分鱼

题目链接:五人分鱼题目描述A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份;B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份;C、D、E依次醒来,也按同样的方法拿鱼。问他们至少捕了多少条鱼?分析1、直接暴力查最少捕获鱼的数量,题目链接有代码。2、查最后一个人拿到鱼...

weixin_42374582的博客 775

Python经典实例:五人分鱼

五人分鱼~ 一道经典的数学题

不知名程序猿的博客 2576

100个python算法超详细讲解:平分7筐鱼

【100个python算法超详细讲解】@谷哥技术1.问题描述 2、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时, 他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们 没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量是 相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份? 2.嵌套列表 如果一个列表的元素是列表,那么这个列表就是一个嵌套列表。一个简 单的嵌套列表定义如下: 使用for循环遍历这个列表,代码如下: 打印结果如图8.1所示。同样可以使用

Lee达森的博客 617
上一篇: python学习-综合练习四(最大公约数、最小公倍数、生成日历、递归调用、字符串)
下一篇: python学习-综合练习六(列表翻转、变量交换、复制列表、元素求和(lambda和递归)、字典排序、字典pop)
_松
博客等级 码龄13年 137粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值