猴子摘香蕉问题python_猴子搬香蕉问题的C语言解
计算机一个经典趣味问题,个小猴子边上有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语言解相关推荐
- 猴子摘香蕉问题python_硬币找零爬楼梯猴子摘香蕉
硬币找零&&爬楼梯&&猴子摘香蕉 假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. #include"CoinPr ...
- 【C++】人工智能实验一 猴子摘香蕉/传教士与野人(含完整代码与状态迁移图)
文章目录 一.猴子摘香蕉问题 1.问题描述 2.解题思路 3.实验结果及分析 实验结果一 实验结果二 实验结果三 4.实验结果 5.实验代码 二.传教士(牧师)与野人问题 1.问题描述 2.实验步骤 ...
- 用软件构造的思维理解猴子摘香蕉问题
背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...
- JAVA语言写的人工智能小实验——猴子摘香蕉
背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...
- 猴子摘香蕉问题-人工智能模拟
题目: 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图1所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上.请定义必要的谓词,列出问题的 ...
- 人工智能程序——猴子摘香蕉(C语言)
问题说明: 房间内有一只猴子,一个箱子和一个挂在天花板上的香蕉.三者的位置如下图所示: 初始状态:三者在输入的初始位置,猴子手上无香蕉,猴子不在箱子上. 目标状态:三者均在香蕉对应的位置,猴子手上有香 ...
- 用软件构造的思想解决猴子摘香蕉问题
背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...
- 人工智能基础---上机1:猴子摘香蕉
人工智能基础-上机1:猴子摘香蕉 一.题目 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图 1 所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再 ...
- 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...
人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...
- [益智]:猴子搬香蕉
题目描述 一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里.(提示:他可以把香蕉放下往返的走, ...
最新文章
- html5小游戏Untangle
- Extjs Ext.TreePanel
- mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...
- Python面向对象编程案例:封装数据库增删改查操作
- Jmeter如何进行http接口测试
- 代码英雄:波澜壮阔的操作系统之战(音频+长文)
- 作为IT人员,专业和不专业的差别有多大?
- 六轴机器人轨迹规划之matlab画直线
- java中CAE画实心圆的参数_java绘图中RenderingHints 参数
- 计算机技术是不是信息技术,计算机技术和信息技术
- web端调用高德API
- Java double value_Java Double doubleValue()用法及代码示例
- ring3下穿透磁盘还原技术揭秘
- 【SDX12】高通SDX12 NatType功能分析及实现
- 当你半夜失眠时,玩手机越玩越精神怎么办
- 计算机不识别lacie硬盘,windows10系统下移动硬盘读不出来的三种解决方案
- local function definitions are illegal
- OpenGL中的gl,glu,glut的区别
- word2vec and glove
- k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?