n个水手分椰子
有n个水手来到一个岛上,采了一堆椰子后,因为疲劳都睡着了。一段时间后,第一个水手醒来,悄悄地将椰子等分成n份,多出m个椰子,便给了旁边的猴子,然后自己藏起一份,再将剩下的椰子重新合在一起,继续睡觉。不久,第二名水手醒来,同样将椰子了等分成n份,恰好也多出m个,也给了猴子。然而自己也藏起一份,再将剩下的椰子重新合在一起。以后每个水手都如此分了一次并都藏起一份,也恰好都把多出的m个给了猴子。第二天,n个水手醒来,发现椰子少了许多,心照不宣,便把剩下的椰子分成n份,恰好又多出m个,给了猴子。

对于给定的整数n,m(约定0<m<n<9从键盘输入),试求原来这堆椰子至少有多少个?

题解:

从最后一个人开始递推。分f[i]表示第i个人平分椰子每堆椰子的个数。所以他面临的椰子个数总数是f[i]*n+m。而这个椰子总是正好是上一个人平分之后拿走一堆剩余下来的。所以求上一个人每堆椰子的个数时要知道,这个数一定是整数。递推公式是f[i-1]=(f[i]*n+m)/(n-1),要满足所有f[i]都为整数,所以第一堆椰子个数进行枚举。最少是n-1-m个,然后每次增加n-1个,这样就能保证上一个人平分椰子个数是整数。就这样了。

#include<limits>
#include<queue>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>#define LL long long
#define eps 1e-8
#define pi acos(-1)
#define INF 0x7fffffff
#define delta 0.98 //模拟退火递增变量
using namespace std;
LL f[20];
int main(){int n,m,i;scanf("%d%d",&n,&m);int k=n-1;f[1]=n-1-m;while(i<=(n+1)){double g=(f[i-1]*n+m)*1.0/(n-1);//g=g*(n-1)-m;if (floor(g)==g){f[i]=g;i++;}else{f[1]+=k;i=2;}}printf("原来椰子最少的个数是%lld\n",f[n+1]*n+m);k=1;for (i=n+1;i>=1;i--){printf("第%d个人面临的椰子个数是:%lld=%lld*%d+%d,藏掉%lld个\n",k++,f[i]*n+m,f[i],n,m);}return 0;
}

n个水手分椰子问题 (递推)相关推荐

  1. 水手猴子和椰子程序matlab,[转载]水手分椰子类型题通解公式及推导(中英对照修改版)...

    一,水手分椰子类型题简易通解公式 通解公式 (1), y=a(a/m)n-1-db/c,(用于b/c为正整数) 通解公式 (2), y=[ka(a/m)n-1-db]/c,(用于b/c不为正整数) 其 ...

  2. c语言水手分椰子3121,我想问一下五个水手分椰子的问题,不说c语言,现在我觉得3121也是答案,能解释一下吗...

    满意答案 lvxxue8h 2018.01.31 采纳率:56%    等级:12 已帮助:21756人 问题只说一半,我看了你的提问,首先是去百度了你问的是什么.... 如果我搜索的不错,你问的问题 ...

  3. 水手猴子和椰子程序matlab,济南少儿编程:编程巧解奥数题 - 水手分椰子,作为家长的你会吗?~山东少儿编程~少儿编程...

    编程可不是兴趣班哦!家长们如果你还在认为编程只是孩子生活当中的一种兴趣班那就往下看吧!看看作为家长您!兴趣班能做出来小学的奥数题吗!(速云少儿编程 - 山东少儿无人机编程) 根据故事中的描述,每一个水 ...

  4. 递归函数法解水手分椰子问题

    问题:水手分椰子 五个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的5堆,还剩下1个给了猴子,自己藏起1堆.然后,第2个水手把剩下的4堆混合后重新分为等量的5堆,还剩下1个给了猴子,自己藏起1 ...

  5. 分治法 分治法求解递推式

    分治法 分治法基本就是下面的三步 分(divide):无法有效解决的划分更小的问题 治(conquer):递归求每一个子问题的解 合(combine):合并解得出原问题解 MergeSort:排列 1 ...

  6. 算法学习——递推之水手分椰子

    算法描述 五个水手来到一个岛上,采了一堆椰子后,因为疲劳都睡着了.一段时间后,第一个水手醒来,悄悄地将椰子等分成五份,多出一个椰子,便给了旁边的猴子,然后自己藏起一份,再将剩下的椰子重新合在一起,继续 ...

  7. c语言五个水手分椰子答案,zstu.4014.水手分椰子(数学推导)

    深入浅出学算法015-水手分椰子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1827  Solved: 524 Description n个水手来到 ...

  8. 分椰子c语言csdn,水手分椰子——迭代法、递归解题

    题目内容: n(1< n <=5)个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的n堆,还剩下1个给了猴子,自己藏起1堆.然后,第2个水手把剩下的n-1堆混合后重新分为等量的n堆, ...

  9. 海盗分椰子c语言编程,水手分椰子——迭代法、递归解题(示例代码)

    题目内容: n(1< n <=5)个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的n堆,还剩下1个给了猴子,自己藏起1堆.然后,第2个水手把剩下的n-1堆混合后重新分为等量的n堆, ...

  10. c语言五个水手分椰子答案,水手分椰子——迭代法、递归解题

    题目内容: n(1< n <=5)个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的n堆,还剩下1个给了猴子,自己藏起1堆.然后,第2个水手把剩下的n-1堆混合后重新分为等量的n堆, ...

最新文章

  1. linux文件目录分析之/etc目录
  2. No such file or class on classpath: WordCount
  3. 统计与机器学习的异同
  4. d630无电池升级bios_太重要,你想要的电脑BIOS全面解读与设置(下)
  5. 高并发分布式系统中生成全局唯一Id汇总
  6. 样条曲线_概念设计:如何控制相关样条曲线几何图形?
  7. html5设计基础报告,《网页设计与制作基础》实验报告.doc
  8. 松下服务器A5代码70维修,松下伺服电机A5系列故障代码.pdf
  9. matlab应用书pdf下载,MATLAB及Mathematica软件应用 pdf epub mobi txt 下载
  10. pic16 hex 逆向c语言,PIC单片机的十六进制文件格式:Hex文件
  11. Shopee打包贴单商品代发选星卓越货代服务系统
  12. CleanMyMac XMac苹果电脑专属系统优化工具
  13. c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
  14. 不使用循环,求二进制中1的个数
  15. FCNIrPic,665005-28-7 齐岳生物金属配合物
  16. 数据结构——环形队列的原理(模拟环形队列)
  17. MATLAB R2021a 绘图函数fplot 使用详解
  18. 《C语言程序设计教程》(一)
  19. 任正非:我们最需要一本厚厚的中国护照
  20. 硬盘里常听到的SATA和IDE是什么?它们又有何区别?

热门文章

  1. unity3d + lua + 斗地主 系列 (2) 创建扑克规则
  2. PyCharm的cache缓存文件清理
  3. 股市一跌再跌,是在提醒我们什么?
  4. Linux命令 - /etc/passwd文件详解
  5. 雅思两次7.5经验分享~希望帮你冲击雅思高分!
  6. Qt+MPlayer音乐播放器开发笔记(一):ubuntu上编译MPlayer以及Demo演示
  7. outlook导入服务器邮件,OUTLOOK怎么导入邮件?
  8. Flutter 倒计时
  9. android经典项目案例开发
  10. 断电后重启后报XFS文件系统错误 XFS (dm-0): Metadata I/O error