很多关卡在向孩子教学代码的同时,更是在潜移默化地训练孩子的编程思维。

在最开始的地牢地图中,孩子需要使用「While-True」循环语句,穿过一个又一个结构重复的迷宫。

在学习「While-True」循环语句的同时,也在训练着使用「循环思维」解决重复问题的能力:

发现并拆解重复部分
解决重复问题
循环运行问题的解决方法

这样,就能只用一段代码,高效地解决重复问题了。

可见,在编程中,学习代码的编写只是基本,更重要的还是掌握运用代码的编程思维。

农民过河问题

在编程的数道经典算法问题中,有一个「农夫过河」问题:

一个农夫带着一只狼,一只羊和一些菜过河。河边只有一条船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下,狼要吃羊,羊要吃菜,请问农夫如何才能使三样东西平安过河。

为了用代码解决这个问题,程序员需要利用「穷举搜索思想」,尝试所有的过河方案,直到找出正确的过河方案。

而在极客战记中,也有着类似的一关。

「士兵,食人魔和农民」

关卡地址:

https://codecombat.163.com/play/level/soldier-ogre-and-peasant?

关卡介绍:

你需要使用狮鹫,把士兵、食人魔、农民,带去河的对岸,狮鹫每次只能带一个人离开,而食人魔会伤害农民,士兵会攻击食人魔,因此不要让士兵和食人魔单独留在一起,也不要让食人魔和农民单独留在一起。

这一关是和「农夫过河」同类型的问题,就像一个脑筋急转弯,不用代码,用我们的智慧,动动脑筋,应该很快就能想出解法。

但你能想出一种解法,如果你想找出所有的解法,是不是就有一定的难度了呢?如何更快更全地找出所有的过河方法呢?

在本关,我们可以学习一下如何使用「穷举思想」解决编程问题。

穷举是什么?

穷举是什么呢?它有着一个高大上的名字,但它的本质却十分的简单朴实。

穷举法的基本思想:根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

简单来说就是:把所有的答案都试一遍,找出正确的答案。

非常的简单粗暴。

因此,它也是编程常用中效率较低的一种算法。

使用穷举法,通常需要三步:解析题目——优化运算过程——开始穷举。

我们来试试利用穷举法解决关卡「士兵,食人魔和农民」吧!

第一步:解析题目

穷举法的第一步就是分析题目,把原本的文字题目,转化成更易于分析,简洁有逻辑的题目类型。

① 题目的对象

题目看似只是三个人的过河问题,但实际上在题目里有四个人物:狮鹫、士兵、食人魔、农民。狮鹫负责帮助大家过河。

② 题目的条件

一、士兵和食人魔不能单独留在一起;

二、食人魔和农民也不能单独留在一起。

也就是说,当狮鹫、士兵、食人魔呆在一起的时候,也不会发生问题,因为士兵和食人魔马上就要被狮鹫运走,来不及打架。

③ 题目的状态

我们需要使用狮鹫来帮助他们从右边飞到左边,因此题目具有以下几种可能发生的情况:

左边有士兵、食人魔、农民、狮鹫,右边什么都没有。

左边有食人魔、农民、狮鹫,右边有士兵。

左边有农民、狮鹫,右边有士兵、食人魔。

……等等多种情况

④ 优雅地表示题目

可以看到,用文字标识题目可能发生的情况,十分地复杂。因此,在编程中,我们常常会用一些特定的符号来简洁地表达题目可能发生的情况。

看看题目,人物只会有两种状态,在右边(还没过河),在左边(过河了),因此我们可以直接用0、1来表示人物的位置。

0表示还没过河;1表示已经过河。

那么就可以这样表示:(狮鹫、士兵、食人魔、农民)

(1,1,1,1)表示所有人物都已过河,到了左边。

(1,0,1,1)表示食人魔和农民过了河,士兵还没有。

……等等

用这种简洁的方式,把题目的所有情况表示出来就是:

共16种状态。

根据题目的条件,我们可知,有以下几种情况是不可取的:

农民和食人魔单独在一起:(0,0,1,1)、(1,1,0,0)

士兵和食人魔单独在一起:(0,1,1,0)、(1,0,0,1)

还有两种隐含的不可取条件:

只有狮鹫自己在一边:(1,0,0,0),这表示,所有人都没过河,只有狮鹫过河了,而狮鹫本来就是帮助大家过河的,不可能自己单独呆在河的一边。所以这种情况是不会发生的。

那么同理还有:(0,1,1,1)这种情况,所有人都过了河,狮鹫没有过河,这也不会发生。

那么本题的问题就变成了:

如何在符合条件的情况下,把(0,0,0,0)转化成(1,1,1,1)。

把题目转化成一个易于分析的题目类型,这才是穷举法的开始。

而穷举法的魅力,还不在这里,它能够帮助我们更快更全地找出问题的所有结果,究竟我们要如何对这个题目进行穷举呢?

编程解决算法问题「农民过河」,穷举思想轻松学(二)将会为你揭秘!

农民过河算法可爱的学习----记录于高考报名后的怀旧emo时刻--穷举算法相关推荐

  1. 穷举算法——奶牛碑文(cow)

    - 穷举算法--奶牛碑文(cow) 题目描述 小伟暑假期间到大草原漫游,在一块石头上发现了一些有趣的碑文.碑文似乎是一个神秘古老的语言,只包括三个大写字母 C.O 和W. 尽管小伟看不懂,但是令他高兴 ...

  2. 穷举算法(鸡兔同笼问题)

    穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...

  3. 百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)

    PHP经典题:百钱百鸡问题(穷举算法) 百钱百鸡问题: 已知:公鸡5元一只,母鸡3元一只,小鸡一元3只 现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只? --请考虑尽可能高效的方法 思路: 如果 ...

  4. 简析穷举算法,及其简单应用

    简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...

  5. 3388=24及24点游戏的穷举算法

    偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么? packag ...

  6. java穷举密码_穷举算法和递推算法(Java)

    穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...

  7. 《我的第一本算法书》 - 学习记录

    目录 0. 算法基础知识 0-1. 什么是算法 0.1.1 算法和程序的区别 0.1.2 排列整数的算法:排序 0.1.3 如何选择算法 0-2. 运行时间的计算方法 0.2.1 输入数据的量和运行时 ...

  8. 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。

    摘要: 转载请注明来自stanlysheng--talk is cheap, show me your code.http://www.cnblogs.com/stanly/ .谢谢.此文我也在CSD ...

  9. 旅行商问题穷举算法c语言,什么是旅行商问题——算法NP、P、NPC知识

    旅行商问题 旅行商问题所描述的是这样一个场景: 有一个商品推销员,要去若干个城市推销商品.该推销员从一个城市出发,需要经过所有城市后,回到出发地.每个城市之间都有道路连通,且距离各不相同,推销员应该如 ...

最新文章

  1. 为什么MySQL数据库要用B+树存储索引?
  2. 人生的意义—我们为什么活着?
  3. 京东零售CEO徐雷升任京东集团总裁,刘强东:将把更多时间投入乡村振兴等事业中...
  4. 关键词为什么迟迟不上首页?太令人“捉急”了!
  5. IBM:决胜量子计算五大战略!商用近在咫尺
  6. poj 2503(字符串hash)
  7. python保存为excel文件_初级Python:在excel文件打开时保存它
  8. S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
  9. Qt中Q_OBJECT与生成的moc文件的作用
  10. Opencv中Get2D()与cvSet2D() 的坐标问题
  11. ES6新特性:Javascript中Generator(生成器)
  12. Redis分布式锁之:RedLock
  13. Fedora 安装 WPS
  14. NumPy 数组属性
  15. 「干活」基因组组装 学习笔记 - 入门知识点和Genome Survey
  16. 探索性数据分析(四)——特征工程(对数转换、标准化/归一化、离散化、标签编码、独热编码、Dummy变量)
  17. opj线性表Placing apples 题解
  18. tipask 问答系统 如何设置第三方一键登录
  19. 第六章 DDL语言
  20. 大青云不显示服务器,《大青云》8月30日合服公告

热门文章

  1. 关于jsplumb多次点击连接线生成多个连接线的问题
  2. 深刻!看一个30岁男人对爱情婚姻的思考
  3. Cocos2D手机游戏开发之优化篇
  4. 获取cookie php,php怎么获取cookie呢?
  5. 如何有效建立客户关系,提高复购率与客户的终生价值
  6. golang windows程序获取管理员权限(UAC )
  7. 如何通过canvas 把页面代码转化为图片
  8. 函数习题(8):递归方法求n阶勒让德多项式的值
  9. 天津计算机一级成绩查询入口,天津计算机一级考试成绩查询入口
  10. 用户输入的是q么python_Python 第1周 - Python基础-python入门\变量\用户输入\循环语句的使用...