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

2023-12-01 19:44
文章标签 问题 每日 五人 分鱼

本文主要是介绍每日一练:“五人分鱼”问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1. 题目

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

2. 解题思路

  把问题一般化,假如一共有 n个人分鱼。设原本有 x 条鱼,A拿走自己的一份后还剩 f ( x ) = n − 1 n ( x − 1 ) f(x)=\frac {n-1}{n}(x-1) f(x)=nn1(x1)条鱼,B拿走自己的一份后还剩 f ( f ( x ) ) = f 2 ( x ) f(f(x))=f^2(x) f(f(x))=f2(x)条鱼……n 个人各自拿走鱼后,剩下 f n ( x ) f^n(x) fn(x) 条鱼。
  其中比较重要一点的规律是总的鱼数-1,总是能被5整除。分鱼规律如下:
A: ( x − 1 ) / 5 (x-1)/5 (x1)/5
B: ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 (x-((x-1)/5)-1)/5 (x((x1)/5)1)/5
C: ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 (x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5 (x((x1)/5)((x((x1)/5)1)/5)1)/5
D: ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 (x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-1)/5 (x((x1)/5)((x((x1)/5)1)/5)((x((x1)/5)((x((x1)/5)1)/5)1)/5)1)/5
E: ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − ( ( x − ( ( x − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 ) − 1 ) / 5 (x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-1)/5)-1)/5 (x((x1)/5)((x((x1)/5)1)/5)((x((x1)/5)((x((x1)/5)1)/5)1)/5)((x((x1)/5)((x((x1)/5)1)/5)((x((x1)/5)((x((x1)/5)1)/5)1)/5)1)/5)1)/5

3. 代码实现

def find_minimum_fish():# 初始总鱼数为1x = 1# 不断尝试增加总鱼数,直到找到满足条件的值while True:# 每次循环重新初始化剩余鱼的数量为当前总鱼数remaining_fish = x# 模拟每个人的操作for _ in range(5):# 按照规定的方式分鱼,每次剩下4份remaining_fish =  (remaining_fish -1)*(4 / 5)# 如果剩余鱼的数量不能被5整除,说明不符合条件,跳出内循环if remaining_fish % 1 != 0:  # 修改此行为判断是否为整数breakelse:# 如果所有人都拿了一份鱼,返回当前的总鱼数return int(x)# 如果不符合条件,尝试下一个总鱼数x += 1# 调用函数获取结果
result = find_minimum_fish()# 打印结果
print(f"五人至少捕了{result}条鱼。")

4. 变种问题

4.1 问题描述

  有五个人捕到了一堆鱼,打算进行分配。规定如下:每个人依次取走鱼的四分之一,但最后一人不扔掉剩余的鱼。找到最小的初始鱼的数量,使得每个人都能平均分到整数条鱼。

4.2 代码实现

def find_minimum_fish_variant2():x = 1while True:remaining_fish = xfor i in range(5):remaining_fish = (3 / 4) * (remaining_fish - 1) if i < 4 else (3 / 4) * remaining_fishif remaining_fish % 1 != 0:breakelse:return int(x)x += 1result_variant2 = find_minimum_fish_variant2()
print(f"五人至少捕了{result_variant2}条鱼。")

4. 参考

https://www.runoob.com/python3/python-five-fish.html
在这里插入图片描述

这篇关于每日一练:“五人分鱼”问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442470

相关文章

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异