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

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 632

RTC温度补偿:如何让时间分秒不差?

RTC(实时时钟)温度补偿技术通过"检测温度→计算误差→动态调整频率"的闭环机制,解决振荡器频率随温度变化导致的时间误差问题。核心步骤包括:1)高精度温度检测;2)基于温度-频率误差模型计算偏差;3)通过硬件(可编程电容/DAC)或软件方式调整振荡频率。该技术需突破温度检测精度、误差模型拟合、频率调整分辨率等关键点,根据不同应用场景(消费电子±5ppm至军工±0.1ppm)选择匹配方案。典型实现如STM32的分段线性补偿算法,可将工业级RTC精度提升至±2ppm以内。

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1229

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

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

qq_41237850的博客 1029

APB Timer验证环境搭建——学习笔记(6)

(1)为RELOAD VALUE配置初始值32'h8000_0000,设定边界值32'h4000_0000,可以看到减到想要的边界值的时候,counter重新加载RELOAD VALUE,重新开始计数;这根线,统计等待到中断的次数,与理论值做。(2)设定Reload value。(1)由于counter。recount总共次数;

qq_41651535的博客 497

C 练习实例80-猴子分桃

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

计海无涯的博客 599

VS(QT)调用Matlab函数的方法

调试–>窗口–>异常设置–>Win32 Exceptions全部不要勾选。选择Microsoft Visual C++ 2017。将生成的.h和.lib分别放置在对应的文件夹。输入mex -setup C++输入deploytool选择。选择Realse x64。

woshigaowei5146的博客 591

SolidWorks草图绘制实战:如何用图片参考快速搞定智能小车底板设计

本文详细介绍了在SolidWorks中利用图片参考进行草图绘制的实战方法,以智能小车底板设计为例,帮助设计师快速将概念转化为精准三维模型。通过插入、对齐参考图片并高效描图,结合参数化约束与尺寸驱动,大幅提升设计效率和准确性,尤其适合新手入门与老手优化工作流。

rust6ferris的博客 218

C语言百日刷题第九天

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

子夜的个人博客 1万+

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。

DazedMen的博客 1924

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

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

Super辉sir的博客 3244

【QNX+Android虚拟化方案】01 - 芯片介绍

【QNX+Android虚拟化方案】01 - 芯片介绍

|~~~热爱生活、努力学习的小伙汁~~~| 2945

【25届数字IC秋招总结】面试经验6——经纬恒润

25届数字ic面试记录——经纬恒润

lalala0635的博客 991

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

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

baidu_41801770的博客 3488

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

青少年趣味编程 910

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

yuhuasheng1997的博客 1512

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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、付费专栏及课程。

余额充值