计算机一个经典趣味问题,个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走

1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。(提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。)

废话不多说,上代码。

#include "stdlib.h"

#include "stdio.h"

#define TOTAL 100

#define DIST 50

#define MAXPAYLOAD 50

/*

offset 是猴子距离开始的位置

cur_num是猴子当前位置有多少香蕉

n表示从offset处搬n个香蕉继续走

x表示从当前位置决策走多少米停下

*/

int move(int offset, int cur_num, int n, int x)

{

int ret = 0;

int left, step;

if (offset == DIST)/*如果猴子到达终点,返回猴子剩余的香蕉数*/

return cur_num;

if(cur_num == 0)/*如果在当前位置没有了香蕉,表示猴子饿死,错误的决策。。。*/

return -1;

if(cur_num < x)/*如果当前位置的香蕉数小于将要走的距离,错误的决策*/

return -1;

if(n < x)/*猴子从当前位置搬运的香蕉数不足以走x米,错误的决策*/

return -1;

if(cur_num < n)

return -1;

/*计算猴子从当前走x米后,还剩下多少香蕉*/

cur_num  n   left

S--------offset-----offset+x-----------E

if(cur_num -n < 2*x)/*cur_num -n 表示猴子到达offset+x位置后,还放在offset处的香蕉数*/

/*cur_num-n < 2*x表示猴子不需要返回offset去拿剩余的香蕉*/

{

left = n - x;/*猴子达到offset+x处后,剩余香蕉数*/

}

else/*猴子需要返回offset去拿剩余的香蕉,由于题设我们知道猴子两次肯定能拿完所有的香蕉*/

{

left = cur_num - 3 * x;/*猴子达到offset+x处后,剩余香蕉数*/

}

if(left <= MAXPAYLOAD)/*如果猴子升下的香蕉数比较少了,那就搬起所有香蕉,尽可能往家赶路吧,不需要回头了*/

{

return left - (DIST - (offset + x));

}

/*决策下一次走几米能让剩下的香蕉数最多*/

for(step = 1; step < DIST-offset-x; step ++)

{

int res = move(offset+x, left, left > MAXPAYLOAD ? MAXPAYLOAD: left, step);

if(res <= 0)

continue;

if(res > ret)

{

ret = res;

}

}

return ret;

}

void main()

{

int ret = 0;

int x = 0;

for(x = 1; x < DIST; x ++)

{

int res = move(0, TOTAL, MAXPAYLOAD, x);

if(res <= 0)

continue;

if(res > ret)

{

ret = res;

}

}

printf("ret = %d\n", ret);

}

猴子摘香蕉问题python_猴子搬香蕉问题的C语言解相关推荐

  1. 猴子摘香蕉问题python_硬币找零爬楼梯猴子摘香蕉

    硬币找零&&爬楼梯&&猴子摘香蕉 假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. #include"CoinPr ...

  2. 【C++】人工智能实验一 猴子摘香蕉/传教士与野人(含完整代码与状态迁移图)

    文章目录 一.猴子摘香蕉问题 1.问题描述 2.解题思路 3.实验结果及分析 实验结果一 实验结果二 实验结果三 4.实验结果 5.实验代码 二.传教士(牧师)与野人问题 1.问题描述 2.实验步骤 ...

  3. 用软件构造的思维理解猴子摘香蕉问题

    背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...

  4. JAVA语言写的人工智能小实验——猴子摘香蕉

    背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...

  5. 猴子摘香蕉问题-人工智能模拟

    题目: 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图1所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上.请定义必要的谓词,列出问题的 ...

  6. 人工智能程序——猴子摘香蕉(C语言)

    问题说明: 房间内有一只猴子,一个箱子和一个挂在天花板上的香蕉.三者的位置如下图所示: 初始状态:三者在输入的初始位置,猴子手上无香蕉,猴子不在箱子上. 目标状态:三者均在香蕉对应的位置,猴子手上有香 ...

  7. 用软件构造的思想解决猴子摘香蕉问题

    背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...

  8. 人工智能基础---上机1:猴子摘香蕉

    人工智能基础-上机1:猴子摘香蕉 一.题目 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图 1 所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再 ...

  9. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...

    人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...

  10. [益智]:猴子搬香蕉

    题目描述 一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里.(提示:他可以把香蕉放下往返的走, ...

最新文章

  1. html5小游戏Untangle
  2. Extjs Ext.TreePanel
  3. mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...
  4. Python面向对象编程案例:封装数据库增删改查操作
  5. Jmeter如何进行http接口测试
  6. 代码英雄:波澜壮阔的操作系统之战(音频+长文)
  7. 作为IT人员,专业和不专业的差别有多大?
  8. 六轴机器人轨迹规划之matlab画直线
  9. java中CAE画实心圆的参数_java绘图中RenderingHints 参数
  10. 计算机技术是不是信息技术,计算机技术和信息技术
  11. web端调用高德API
  12. Java double value_Java Double doubleValue()用法及代码示例
  13. ring3下穿透磁盘还原技术揭秘
  14. 【SDX12】高通SDX12 NatType功能分析及实现
  15. 当你半夜失眠时,玩手机越玩越精神怎么办
  16. 计算机不识别lacie硬盘,windows10系统下移动硬盘读不出来的三种解决方案
  17. local function definitions are illegal
  18. OpenGL中的gl,glu,glut的区别
  19. word2vec and glove
  20. k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?

热门文章

  1. Android 百度地图SDK与导航SDK相关问题
  2. 初见安~这里是樱狸的博客目录~
  3. 联想电脑重装win7系统详细图文教程
  4. 戴尔电脑开机卡logo无法开机问题及解决办法
  5. 小觅双目摄像头标准版视觉惯性 SLAM DEMO
  6. 嵌入式文件系统固件img制作与解包
  7. json字段名不一致的问题
  8. AI上推荐 之 隐语义模型(LFM)和矩阵分解(MF)
  9. css中设置背景颜色、背景图片
  10. mt4双线macd_ATFX:技术指标MACD及顶底背离用法精讲