狼、羊、菜和人过河(三年级下册数学凌少安)

合集下载

农夫过河问题(C++编写)

农夫过河问题(C++编写)

cout<<" **
------------------------
**\n";
cout<<" **
|
农夫过河问题
|
**\n";
cout<<" **
------------------------
**\n";
cout<<"
****************************************************************************\n";
1、问题描述
从前,一个农夫带着一只狼,一只羊和一棵白菜要河(注意该狼被农夫训服了,但还会 吃羊)。他要将所有东西安全的带到河的对岸,不幸的是河边只有一条船,只能装下农夫和 他的一样东西,并且农夫必须每次都随船过,因为只有他能撑船。在无人看管的情况下,狼 要吃羊,羊要吃白菜,因此,农夫不能在河的某边岸上单独留下狼和羊,也不能单独留下羊 和白菜。那么农夫如何才能使三样东西平安过河呢?
3)、如果上两个条件都不满,则可执行运输的动作,但每次都应考虑,该运 输情况以前是否执行过(即两岸以及船上的东西以时四者各自的状态,并递归的进行下一次运载。
5、系统测试
6、经验总结
解决实际问题时,应先分析实际问题,找出实际问题的所有约束条件, 然后对问题进行数学模型的抽象化,抓主要因素,省去一些不需要的因素,将其 抽象为数学问题,然后再从整体上设计算法,搭建程序的框架,最后一步步完善 细节,这样做,会使本来毫无头绪的问题变得清晰起来。
if (a[ferryTimes][i] == a[ferryTimes][3]) {

算法谜题1,狼羊菜过河

算法谜题1,狼羊菜过河

算法谜题1,狼⽺菜过河问题描述农夫需要把狼、⽺、菜和⾃⼰运到河对岸去,只有农夫能够划船,⽽且船⽐较⼩,除农夫之外每次只能运⼀种东西,还有⼀个棘⼿问题,就是如果没有农夫看着,⽺会偷吃菜,狼会吃⽺。

请考虑⼀种⽅法,让农夫能够安全地安排这些东西和他⾃⼰过河。

分析问题很简单,但如何⽤计算机求解呢。

农夫渡河从本质上是⼀种状态的改变。

有农夫、狼、⽺、菜四个个体,任何时刻每个个体的状态只有⼀种,每个个体有两种状态(没有过河、已经过河)。

依次⽤4位分别代表农夫、狼、⽺、菜,0表⽰未过河,1表⽰已过河。

则起始状态为0000,⽬标状态为1111。

共有8种过河动作(状态转换运算)农夫单独过河农夫带狼过河农夫带⽺过河农夫带菜过河农夫单独返回农夫带狼返回农夫带⽺返回农夫带菜返回优先级:农夫过河时,优先带货物;回返时优先不带货物。

有限种状态:可能有16(2^4)种状态,但因为狼吃⽺,⽺吃菜的限制,部分状态是⽆法成⽴的。

实现状态空间树(回溯法)是以0000为根的⼀颗状态树,当某个叶⼦节点是状态1111,则表⽰从根到这个叶⼦节点之间的状态序列是本问题的⼀个解,需要避免出现重复状态导致死循环。

⽅法1:每个状态有8种可选动作,转换为8个新状态,但在特定状态下某些动作是⽆效的。

定义8种状态转换运算,对当前节点遍历执⾏这8种运算,找到所有⼦节点⽅法2:依据当前状态,判别它所有可选的动作(最多4种)。

class Program{static void Main(string[] args){var original = new State();var path = new List<State>();path.Add(original);int count = 0;Search(path, ref count);Console.ReadKey();}private static void Search(List<State> path, ref int count){var cur = path[path.Count - 1];if (cur.Man && cur.Wolf && cur.Vegetable && cur.Sheep){count++;Console.WriteLine($"解{count}:");path.ForEach((a) => { Console.WriteLine(a.Action); });return;}if (cur.Man){Switch(path, ref count, cur, "返回");}else{Switch(path, ref count, cur, "过河");}}private static void Switch(List<State> path, ref int count, State cur, string action){var newState = cur.Copy();newState.Man = !newState.Man;newState.Action = "独⾃" + action;Action(path, ref count, newState);if (cur.Sheep == cur.Man){newState.Sheep = !newState.Sheep;newState.Action = "带着⽺" + action;Action(path, ref count, newState);newState.Sheep = !newState.Sheep;}if (cur.Wolf == cur.Man){newState.Wolf = !newState.Wolf;newState.Action = "带着狼" + action;Action(path, ref count, newState);newState.Wolf = !newState.Wolf;}if (cur.Vegetable == cur.Man){newState.Vegetable = !newState.Vegetable;newState.Action = "带着菜" + action;Action(path, ref count, newState);newState.Vegetable = !newState.Vegetable;}}private static void Action(List<State> path, ref int count, State newState) {if (newState.IsOk){foreach (var item in path){if (item.Equals(newState)){return;}}path.Add(newState);Search(path, ref count);path.RemoveAt(path.Count - 1);}}//false 表⽰未过河, true表⽰已过河private class State{public bool Man { get; set; }public bool Wolf { get; set; }public bool Sheep { get; set; }public bool Vegetable { get; set; }public string Action { get; set; }public bool IsOk{get{if (Wolf == Sheep && Wolf != Man){return false;}if (Sheep == Vegetable && Sheep != Man){return false;}return true;}}public State Copy(){return new State{Man = this.Man,Wolf = this.Wolf,Sheep = this.Sheep,Vegetable = this.Vegetable};}public bool Equals(State newState){return (this.Man == newState.Man&& this.Wolf == newState.Wolf&& this.Sheep == newState.Sheep&& this.Vegetable == newState.Vegetable);}}}状态空间图所有状态作为图的节点遍历图,找出所有从0000到1111的路径连接状态的条件农夫的状态要不⼀样(只有农夫可以划船,每次过河,不能缺农夫)最多只有⼀个其他个体的状态不⼀样(⼀次只能带⼀个过河),且这个个体的状态要与农夫⼀致。

巧妙过河

巧妙过河

龙源期刊网
巧妙过河
作者:陆淼欣
来源:《小天使·二年级语数英综合》2012年第03期
今天,小姨(yí)到我家来玩,还给我出了一道题:农夫要把狼、羊和青菜运过河,每次最多运1个,怎么运?
我想,要是把狼先运过去,留下的羊要吃青菜,不行。

只能先把羊运过去,留下狼和菜。

接下来再运什么呢?如果运菜的话,羊就会吃菜的,可是要运狼的话,狼就会吃羊的,这可怎么办呢?
我有点着急了。

妈妈提醒我:“回来时船是空的,可以带一样东西哦。


原来还可以这样啊!我沉思片刻(kè),高兴地对小姨说:“我想出来了。


小姨让我快回答。

我理直气壮(zhuànɡ)地说:“先把羊运过去,再运狼,狼到了对面再把羊带回来,这样狼就吃不着羊了,然后再把菜运到对岸去,狼又不吃菜,最后再把羊运
过去。

”小姨夸我聪明,说我很会思考问题,我听了心里美滋滋的。

(指导老师沈曙)。

人、狼、羊、白菜过河问题

人、狼、羊、白菜过河问题
狼和羊过河兔子羊白菜老山羊种白菜狼菜羊过河过河问题羊吃白菜羊骨白菜汤小船过河问题船夫过河问题过河问题公式
10. 一个人带着狼、山羊和白菜来到一条河边, 想要到河对岸去。岸边有一条小船,小船只能 装下这个人以及狼、山羊和白菜中之一。如果 没有人照看,狼会吃掉山羊,山羊会吃掉白菜。 试问它们能不能安全地渡河?如果可能,请用 有穷自动机写出渡河的方法。 参考答案:能安全地渡河。 先定义: 人=M,狼=W,山羊=G,白菜=C。 字符集为每次渡河的成员,故∑={M, MW,MG,MC}。 状态集为河边和对岸的情况,用双竖线 表示河。因此,开始状态为:MWGC||φ, 接受状态为:φ||MWGC。DFA图如下:
MG
MWGC||φ WC||MG
M
MWC||G
MW
C||MWG MG
MC W||MGC MG
MGC||W
MC
MWG||C
MW
G||

狼羊过河

狼羊过河
用简单的查表代替switch…case语句。映射表内容如下:
截图3
表中的处理函数非常简单,就是根据当前状态以及过河动作,得到一个新状态,如果过河动作与当前状态矛盾,
则返回失败,以FARMER_GO_TAKE_WOLF动作对应的处理函数ProcessFarmerGoTakeWolf()为例,看看ProcessFarmerGoTakeWolf()函数
本题算法的核心就是对这个状态树进行深度优先遍历,当某个状态满足结束状态时就输出一组结果。
需要注意的是,并不是每个动作都可以得到一个新状态,比如“农夫带狼过河”这个动作,
对于那些狼已经在河对岸的状态就是无效的,无法得到新状态,因此这个八叉树并不是满树。除此之外,
题目要求的合法性判断也可以砍掉很多无效的状态。最后一点需要注意的是,即使是有效的状态,也会有重复,
Farmer go back, item states is : 0 0 1 0
Farmer take vegetable go over river, item states is : 1 0 1 1
Farmer take sheep go back, item states is : 0 0 0 1
这个检查由IsProcessedState()函数完成,IsProcessedState()函数的实现也很简单,就是遍历states,
与新状态比较是否有相同状态,代码如下:
截图5
运行程序,最终得到的结果是:
Find Result 1:
Unknown action, item states is : 0 0 0 0
终状态,如果是则说明这个搜索路径可以得到一个解,于是调用PrintResult()函数打印结果,随后的return表示终止设个搜索路

人狼羊菜安全渡河问题1500字

人狼羊菜安全渡河问题1500字

人狼羊菜安全渡河问题1500字人狼羊菜安全渡河问题是一个著名的逻辑推理问题,常常用来考察人们在面对复杂情况时的思考能力和解决问题的能力。

问题描述如下:有一天,一个人带着一只狼、一只羊和一颗白菜来到了一条河边,他想把它们都安全地带到对岸去。

但是,他只有一条小船,而且这条小船只能承载他和另外一个物品(人、狼、羊、菜)。

问题是,如果他将狼与羊或羊与菜一起留在岸上,那么狼会吃掉羊,羊会吃掉菜。

请问,这个人应该如何才能够将所有物品都安全地带到对岸去?这个问题可以通过逐步分析来解决。

首先,我们可以将问题简化为只有三个物品的情况,即人、狼和羊。

这样,我们可以列出所有可能的情况如下:1. 人和狼一起过河,然后人回来,再把狼带过去。

这种情况下,狼会吃掉羊。

2. 人和羊一起过河,然后人回来,再把狼带过去。

这种情况下,羊会吃掉菜。

3. 人和羊一起过河,然后人回来,再把羊带过去。

这种情况下,狼会吃掉羊。

通过分析可以发现,前两种情况都是不可行的,因为狼或羊会被吃掉。

所以,我们只能选择第三种情况。

具体而言,我们可以按照以下步骤来解决问题:1. 人带着羊过河,然后人回来。

2. 人带着狼过河,然后把狼放在对岸,但是人自己回来。

3. 人带着菜过河,然后人放菜在对岸,再一起回去。

4. 人带着羊过河,完成。

通过这个方法,我们可以确保所有物品都能够安全地过河。

而且,我们也可以通过类似的方法解决更复杂的问题,比如加入更多的物品。

总结起来,人狼羊菜安全渡河问题是一个充满挑战和乐趣的逻辑推理问题。

通过逐步分析和合理安排,我们可以找到解决问题的方法,并将所有物品都安全地带到对岸。

这种问题可以提高人们的思维能力和解决问题的能力,同时也展示了逻辑推理的重要性。

三年级第二讲找规律讲义

趣题
一个农民携带一只狼,一只羊和一棵白菜,要借助一条 小船过河.小船上除了农民只能再带狼、羊、白菜中的 一样.而农民不在时,狼会吃羊,羊会吃白菜.农民如 何过河呢?
先根据每个东西的特点就可以发现:狼不吃白菜。
那么就根据这一点,就可以得出:
第一次:把羊带到河对岸
第二次:把狼带到河对岸,顺便把羊给带回来
?
A
B
C
(14)观察图形的变化,按照这种变化规律,在格中填上应有的图形。
练习
(1)仔细观察下图,找找变化规律,猜猜 在第三组的空白格内填一个什么样的图?
(2)按顺序仔细观察下列图形,猜一 猜第三组的空白处应填什么图?
July 10, 2015
(3)仔细观察下列图形的变化,再按(1)、 (2)、(3)、…的顺序数下去,第(4)个方 框是怎样的图形?
(4) 观察下图的变化:在方框(4)中应 画出怎样的图形?
(5) 认真观察图,找找变化规律,画出第三组图.
(6)四个小动物排座位:一开始,小鼠坐在第1号位子 上,小猴坐在第2号,小兔坐在第3号,小猫坐在第4号, 以后它们不停地交换位子,第一次上下两排交换,第二 次是在第一次交换后左右两列交换,第三次再上下两排 交换,第四次再左右两列交换……,这样一直换下 去.问:第十次交换位子后,小兔坐在第几号位子上? (参看下图)
2、数列中的变化规律
在日常生活中,我们经常会碰到许多按一定顺序排
列的数,比如:
一列自然数:1,2,3,4,5,6,7,8,… 年份:1998,1999,2000,2001,2002,… 某文具厂生产笔筒个数(按月份排):400,450, 500,450,500,550,…
像上面的这些例子,都是按某 种法则排列着的一列数,这样的一 列数就叫做数列。数列里的每一个 数都叫做这个数列的项。其中第1个 数叫做数列的第1项,第2个数叫做 数列的第2项,即第几个数就叫做数 列的第几项,比如年份的第3项就是 2000。

1.2算法和算法的描述


算法一
算法二
第一步:烧水;
第一步:烧水;
第二步:水烧开后, 优化? 第二步:烧水过程中,
洗刷茶具;
洗刷茶具;
第三步:沏茶。
第三步:水烧开后沏茶。
一个好算法必须用到科学的方法
第二个算法的科学性在于应用了“统筹方法”
算法是程序设计的核心,是程序设计的灵 魂。算法的好坏,直接影响着程序的通用性和 有效性,影响着问题解决的效率。
第三步:人和菜过河,人返回,留下菜; 第四步:人和羊过河
二、算法的描述——用流程图描述算法
常用的“流程图”所用的基本符号
程序框
名称
功能
开始/ 结束
算法的开始 和结束
输入/ 输出
输入和输出 信息
处理
计算与赋值
判断
条件判断
流程线 连接点
算法中的流向
表示算法流向出口或入 口连接点
用流程图描述求解 a的绝对值的算法
一、算法——解决问题的方法和步骤
算法的特征:
1、输入——一个算法有零个或多个输入; 2、输出——算法有一个或多个输出; 3、确定性——算法的每一个这步个骤人必连须老要张也确不切认地识定义; 4、有穷性——一个算法在执行有穷步之后必须结束; 5、能行性——算法中有待执行的运算和操作必须是相
当基本的。(运算和操作能精确地执行)
最小自然数。
韩信点兵
1、令X为1 2、如果X整除3余1,X整除5余2,X整除7余4,这就是题目要求的 数,则记下这个X 3、令X为X+1(为算下一个作准备) 4、如果算出,则结束;否则跳转2 5、写出答案
过河的方案: 第一步:人和羊过河,人返回,留下羊; 第二步:人和狼过河,人和羊返回,留下狼; 第三步:人和菜过河,人返回,留下菜和狼; 第四步:人和羊过河

一个农夫带着一只狼、一只山羊和一篮蔬菜要过河,但只有一条小船PPT完美课件

一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
例2.写出用“二分法”求方程 x2-2=0(x>0)的 近似解的算法.
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
解方程组
3x-2y=3
2x+y=4
① ②
第一步, 取 a1=3,b1=-2,c1=3,
a2=2,b2=1,c2=4.
第二步,计算
x= b1c2 -b2c1 , y= a 2c1 -a1c 2 .
a 2b1-a1b2
a 2b1 -a1b 2
第三步,给出运算结果.
x= b1c2 -b2c1 a 2b1 -a1b2
【提升总结】
1.算法定义的理解 在数学中,现代意义上的“算法”通常是指可以用 计算机来解决的某一类问题的程序或步骤,这些程 序或步骤必须是明确和有效的,而且能够在有限步 之内完成.
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
一个农夫 带着一 只狼、 一只山 羊和一 篮蔬菜 要过河 ,但只 有一条 小船P PT 完美课件
第一步,把9枚金币平均分成三组,每组三枚. 第二步,先将其中的两组放在天平的两边,如果天平 不平衡,那么假金币就在轻的那一组;如果天平左 右平衡,则假金币就在未称量的那一组里. 第三步,取出含假币的那一组,从中任取两枚金币放 在天平两边进行称量,如果天平不平衡,则假金币 在轻的那一边;若平衡,则未称的那一枚就是假币.

各种形式的过河问题

精心整理
各种形式的过河问题
1.最古老的过河问题
一个农民携带一只狼,一只羊和一棵白菜,要借助一条小船过河。

小船上除了农民只能再带狼、羊、白菜中的一样。

而农民不在时,狼会吃羊,羊会吃白菜。

农民如何过河呢?
2.三个道士与三个和尚
三个老道士与三个和尚分别在一条河的两岸,都要到河的对岸去。

河中只有
6.如何尽快过河
在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。

如果不借助手电筒的话,大家是无论如何也不敢过桥去的。

不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。

如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。

问题是,如何设计一个方案,让这四人尽快过桥。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档