c语言 《过河》

来源:百度知道 编辑:UC知道 时间:2024/06/01 04:47:52
人、狮子、兔子、大白菜从河一边到河另一边,人每次只带一物,如何过河?
用C语言编程
我没有骗分,实在是不懂啊,
这号也是刚申请的
帮帮忙呀!用C语言编出程序
这是编程问题啊!

先带兔子过河,再回来,再带狮子过河,顺便把兔子带回来,再把白菜带过河,然后回来再把兔子带过去,就OK了

这个主要是人不在的时候,狮子会吃兔子,兔子会出白菜,但狮子肯定不会吃白菜是不,就根据这个想不就是了

简单的逻辑问题,我只说算法,你定义两个数组,数组一代表河这边的东西,数组二代表河那边的东西(其中加入一个空白东西,也就是不带东西的选择),循环带数组1中的东西,每次过河带东西之后,判断两个数组中是否有吃与被吃的关系(这个定义成一个函数),然后就是回来,回来的时候循环带数组2中的东西,判断两个数组中是否有吃与被吃的关系,这样循环下去,直到河这边的东西为空的时候就完了

是不是在骗分啊?
相同的问题。

这个问题不简单呀,是个数学模型上的问题,可以把这个问题扩展到几百个元素。

你得让我想想

想起来了。注释写在了后面,主要思想是设置了两个数组。left[3]表示没过河的集合,right[3]表示已经过河的集合。0,1,2分别表示白菜,兔子,狮子,-2表示空(比如白菜过河了那么left[0]就等于-2)。输出结果中用x to left 和x to right表示元素的运动方向。
程序如下:
#include <stdio.h>
#include <math.h>
int kong(int left[])
//判断是否全都过河了,0表示没全过河,1表示全过河了
{int i;
for(i=0;i<3;i++)
{if(left[i]!=-2)
return 0;
}
return 1;
}
int ltor(int left[],int right[])
//到对岸时选一个元素
{int i,a;
for(i=0;i<3;i++)
if(left[i]!=-2)
{if(abs(left[(i+1)%3]-left[(i+2)%3])!=1)
/