C语言经典例80-猴子分桃

65.猴子分桃问题 编程题目: 65.猴子分桃问题:海滩上有一堆桃子,五只猴子来分。第一只 猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 示例代码: package program.calculation.exercise65; /** * 65.猴子分桃问题:海滩上有一堆桃子,五只猴子来分。 * 第一只 猴子把这堆桃子平均分为五份,多 阅读详情
AI摘要

本文解析了一道经典的数学问题——五只猴子如何分一堆桃子,每只猴子都将桃子平均分成五份并扔掉多余的,探讨了如何计算原始桃子的最小数量。通过逆向思维和递归算法,找到了解决问题的有效方法。

1 题目

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?

2 分析

设原来至少有 x x x 个桃子:

  1. 第一只猴子拿走一份后,剩余的 4 4 4份桃子总数为 a a a, a = 4 / 5 ∗ ( x − 1 ) a=4/5*(x-1) a=4/5∗(x−1)
  2. 第二只猴子拿走一份后,剩余的 4 4 4份桃子总数为 b b b, b = 4 / 5 ∗ ( a − 1 ) b=4/5*(a-1) b=4/5∗(a−1)
  3. 第三只猴子拿走一份后,剩余的 4 4 4份桃子总数为 c c c, c = 4 / 5 ∗ ( b − 1 ) c=4/5*(b-1) c=4/5∗(b−1)
  4. 第四只猴子拿走一份后,剩余的 4 4 4份桃子总数为 d d d, d = 4 / 5 ∗ ( c − 1 ) d=4/5*(c-1) d=4/5∗(c−1)
  5. 第五只猴子拿走一份后,剩余的 4 4 4份桃子总数为 e e e, e = 4 / 5 ∗ ( d − 1 ) e=4/5*(d-1) e=4/5∗(d−1)

求 x x x 就是要从 e e e 反推到 x x x,本题限定了要求桃子最少的情况,那么当轮到第五只猴子时,要保证最少,则一开始设 e = 4 e = 4 e=4 即此时剩余4份每份只有1个桃子,然后利用该假设进行向上递归计算每轮剩余的桃子个数,判断每轮剩余桃子个数能否被4整除,若中间有一轮不能被4整除,则一开始 e ! = 4 e!=4 e!=4,则用 2 ∗ 4 2*4 2∗4重新尝试,每轮都要乘 4 4 4是因为,每轮都要保证能被4整除。

3 实现

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x; // 桃子总数
	int i = 0; // 循环轮数
	int j = 1; // 暂存每轮尝试的起始e的倍数
    while (i < 5) { // 一共五只猴子,五轮循环
        x = 4 * j; // 拟定起始e的值
        for (i = 0; i < 5; i++) {
            if (x % 4 != 0) { // 最后一只猴子待分配的桃子数一定能被4整除
				break; // 若在5轮中某一论不能被4整除,则要重新更换起始e的值
			}
            x = (x/4)*5+1; // 向上递归累加
        }
        j++; // 通过递增j来更换4的倍数,从而重新更换起始e的值
    }
    printf("%d\n", x);
    return 0;
}

4 运行结果

3121
编程题——猴子分桃 题目——猴子分桃 题目描述: 老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。 第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。 第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。 后来的小猴子都如此照办。最后剩下的桃子全部留给... 阅读详情

相关推荐

经典C语言程序100例之八零

【程序80】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只    猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了    一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,    问海滩上原来最少有多少个桃子? 程序源代码: main() {int i,m,j,k,count; for(i=4;i<10000;i+=4) { count=0; m=i; for(k=0;k<5;k++) {  

希望我的博客,能帮上你解决学习中工作中所遇到的问题 450

猴子分桃

猴子分桃的故事大体有两种描述: 描述 1 :五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个? 描述 2 :海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子...

dongkai0918的博客 5784

简单C语言五猴分桃的5种解法(附源码).txt

简单C语言五猴分桃的5种解法 小学算术解法、迭代公式解法、 小学奥数解法、另一奥数解法、 穷举法求解

猴子分桃问题的几种解法

五只猴子采得一堆桃子,半夜里第一只猴子偷偷起来把桃平均分成五分,发现还多一个,它吃了哪个桃子,还拿走其中的一份,第二只猴子起来又把桃子分成五分,还多一个,它吃了那个桃子,有拿走其中的一份,第三第四第五只猴子都如此做了,请问这堆桃子有多少个。 在参考了一些经典解法、研究了该问题的过程后,以下为一些自认为较为简洁明白的解法程序 1.利用总式子为整数,进行枚举循环。 #include <stdio.h> #include <stdlib.h> int main() { doubl

m0_62167955的博客 3309

Comsol 基于局部谐振压电材料的可调水下低频吸声

它通过建立基于LRPM的水下吸声理论模型,从有效材料的角度分析可调吸声特性和吸声机理,进一步提高吸声性能。该研究发现,薄的LRPM层可以在目标低频范围内实现出色的吸声效果,而这个目标低频可以通过操纵谐振分流电路进行主动调谐。通过引入局部谐振压电超材料和可调谐的谐振分流电路,研究人员能够有效地控制水下低频吸声特性,并且在吸声带宽方面取得了显著的改进。通过利用薄的活性超材料层,LRPM在水声吸声方面展现出潜力,并且通过操纵谐振分流电路,可以实现对吸声特性的精细控制。

weixin_45382232的博客 786

手把手教你用ADS和CGH40010F模型搭建Doherty功放仿真原型(附工程文件)

本文详细介绍了如何使用ADS软件和CGH40010F GaN器件模型搭建Doherty功放仿真原型,涵盖工程准备、关键电路模块实现、效率优化技巧及常见问题排查。通过实战指南和效率优化技巧,帮助工程师快速掌握Doherty功放设计,提升5G基站和广播发射系统的功率放大器性能。

weixin_26897585的博客 344

经典c语言程序100例(71-80)

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数。题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只。一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,题目:编写input()和output()函数输入,输出5个学生的数据记录。题目:找到年龄最大的人,并输出。1/1+1/3+...+1/n(利用指针函数)题目:放松一下,算一道简单的题目。题目:反向输出一个链表。题目:创建一个链表。

qq_41237850的博客 1029

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3812

C 练习实例80-猴子分桃

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?设最后一个猴子(5th)拿完桃后桃子的个数为x,x的值每一轮都得能被4整除。知乎上看到有一个人心算这个问题,虽然看不太懂,但我大为震撼。拿后 拿前。

计海无涯的博客 599

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2578

微信中调起支付宝支付

微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...

han_calligrapher的博客 2万+

C语言百日刷题第九天

放弃不难,但坚持一定很酷。 C语言百日刷题第九天

子夜的个人博客 1万+

基于YOLOv10的PCB电子元件智能识别系统设计与实现

数据预处理模块:负责对原始PCB图像进行标注、增强和格式转换模型训练模块:基于YOLOv10架构进行模型训练和优化推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的交互界面,方便用户操作和结果可视化YOLO(You Only Look Once)系列算法自2016年提出以来,经历了多次迭代更新。YOLOv1-v3:奠定了YOLO系列的基础架构YOLOv4-v7:引入大量优化技巧和网络结构改进YOLOv8-v9:进一步优化模型结构和训练策略YOLOv10。

YOLO 156

C语言每日一练——第48天:五猴分桃问题

C语言每日一练 2021年10月30日——分析:每只猴子都能分成5份后多出一个,有五只猴子,所以可以理解为有一个数x,它能完成5次以下运算:(x-1)/5,且每次都能除尽,每分一次,还需要乘4/5,因为每只猴子分完还得拿走一份。题目要求求出最小的满足以上条件的数字。【倒推法更快,见下文】

Super辉sir的博客 3244

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

迅投miniQMT量化交易实战指南:从入门到自动化交易系统构建

迅投miniQMT量化交易实战指南摘要 本文全面介绍迅投miniQMT量化交易系统的开发流程,重点包括: 环境配置:详细说明miniQMT极简模式的安装步骤,包括xtquant库获取、Python版本要求及验证方法 行情数据模块:解析xtdata模块的核心功能,包括: 获取板块分类与股票列表 查询合约基础信息 下载历史K线数据(支持tick、分钟、日线等周期) 交易执行模块:介绍xttrader模块的交易API,涵盖: 账户连接与初始化 订单管理(下单、撤单、查询) 持仓与资产查询 实战开发:提供可直接运行

huanghm88的专栏 665

五猴分桃题解析(C语言5种解法)

五猴分桃题解析(C语言 5 种解法 ) 本人喜欢探索各种算法。80年代听闻五猴分桃题,颇感兴趣。曾尝试求解,得小学算术解法和迭代(递增,递减)算法。那时还没有PC是用算盘计算的,那”二弹一星”据说也是用算盘计算的。今见网上各种解法,感觉大同小异,不值一哂。故复提起兴趣再次索解,又得三种解法,即小学奥数解法、另一奥数解法、穷举解法。 解法一:小学算术解法 解题思路:理解题意,确立起算基数,试求中间差,立运算式试算解题。 确立基数 A : A - 1 能整除 5 , 满足前行运算,同时能整除 4 ,满足后续

baidu_41801770的博客 3488

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

电子协会 C语言 3级 50 、猴子吃桃

电子协会 C语言 3级 50 、猴子吃桃

青少年趣味编程 910

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

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

【C语言基础案例目录】经典C语言程序设计100例目录(附100例题目)

《C语言基础案例目录》精选100个经典程序设计案例,分为10个部分(每部分10例),涵盖数字组合、奖金计算、完全平方数等基础算法。案例由浅入深,包含素数判断、水仙花数、斐波那契数列等数学问题,以及递归、绘图、位运算等进阶内容。每个案例提供题目描述和源码解析,适合C语言学习者系统练习编程思维和实战能力。从基础控制结构到复杂算法实现,全面培养程序设计能力。

yuhuasheng1997的博客 1512

C语言经典一百例

经典C语言程序设计100例 1.数字排列    2.奖金分配问题    3.已知条件求解整数    4.输入日期判断第几天 5.输入整数进行排序    6.用*号显示字母C的图案  7.显示特殊图案    8.打印九九口诀 9.输出国际象棋棋盘    10.打印楼梯并按条件打印笑脸   11.经典兔子问题   12.判断素数 13.水仙花数问题   14.正整数分解质因数   15.学习成

xngjing的博客 1万+

经典C语言代码——part 21

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只。猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了。一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,题目:找到年龄最大的人,并输出。请找出程序中有什么问题。问海滩上原来最少有多少个桃子?

2303_81838541的博客 536

【C语言基础案例】经典C语言程序设计100例附源码解析(71-80例)

本文介绍了C语言程序设计71-80例的部分源码及解析,涵盖多个核心知识点。主要内容包括:结构体应用的学生信息管理系统(例71)、链表创建与反向输出(例72-73)、链表连接操作(例74)、逻辑推理题(例75)以及函数指针应用(例76)。示例程序展示了C语言中结构体、链表、指针、动态内存分配等关键技术的实际应用,帮助读者深入理解这些基础概念并提升编程能力。每个案例都包含完整的源代码和核心知识点分析,适合C语言学习者参考实践。

yuhuasheng1997的博客 548

经典c程序100例==71--80

【程序71】题目:编写input()和output()函数输入,输出5个学生的数据记录。1.程序分析:2.程序源代码:#define N 5struct student{ char num[6]; char name[8]; int score[4];} stu[N];input(stu)struct student stu[];{ int i,j; for(i=0;i { printf("/n

徒步旅行... 797

C语言习题100例(最新整理版)

C语言习题100例(最新整理版) 去发现同类优质开源项目:https://gitcode.com/ 介绍 本仓库提供了一份精选的C语言习题100例,旨在帮助编程爱好者通过练习提高C语言的编程能力。以下是其中一道例题的详细介绍: 题目【程序80】:海滩桃子问题 题目描述:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分成五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩...

gitblog_06796的博客 436

C语言学习-菜鸟教程C经典100例-练习80

摘要:本文通过C语言程序解决了经典的五猴分桃问题。使用倒推法从最小剩余桃子数开始枚举,验证每次分桃过程是否符合整数条件。最终得出海滩上原有最少3121个桃子,并详细展示了每只猴子的分桃过程:每只猴子将桃子分成5份多1个,扔掉多余的1个后拿走1份。程序输出各步骤剩余桃子数,验证了3121是最小解。该解法巧妙运用数学推导和程序验证相结合的方法。

2301_77670476的博客 73

经典C语言程序100例(71-80)---------------转自C语言经典论坛

【程序71】题目:编写input()和output()函数输入,输出5个学生的数据记录。1.程序分析:2.程序源代码:#define N 5struct student{ char num[6]; char name[8]; int score[4];} stu[N];input(stu)struct student stu[];{ int i,j; for(i=0;i { printf("/n

cc的天空 2638
上一篇: C语言经典例79-字符串排序
下一篇: C语言经典例82-八进制转换为十进制
syzdev
博客等级 码龄9年 852粉丝 149原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值