C# 关于农夫过河的问题

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

课程设计第五题

1.题目探讨农夫过河的问题

2.设计思路

(1)农夫由A到B的情况

(1)带走一个动物后,另外的两个物是不是可以相吃

(2)会不会把刚带回来的又带到对岸去

(3)最后一次带的情况比较的特殊,判断最后一次走后是不是所有的都不在了对岸

(2)农夫从B到A的情况

(1)对岸是不是只有一个物体

(2)对岸是不是有两个物体,若是有两个物体的话他们的处理方式不一样,1。两个物体会相克的,则把羊带走,2如果不是的话那么农夫就空着手回去。

3.应该注意的问题

(1)。在最后的一次带走羊的时候,应该加如一个新的判段

(2)。以及在带回羊的时候,我们要对其进行一个标记,不然的话我们就很容易进行死循环里面

(3)以及每一次从A带东西去B的时候,我们都要对他的位置进行标记下

4.咸受

在对一个问题分析的时候,我们应该先把每一种情况给分析出来,要把问题分析得分面一些,最好是不要落下任何的一种情况,这样我们就可以对每一种情况编写相应的代码了。5.源代码

static int sum(int[] a)

{

int sum = 0;

for (int i = 0; i < a.Length; i++)

{

sum = sum + a[i];

}

return sum;

}

static void Main(string[] args)

{

string[] wu = new string[4] { "农夫", "狼", "羊", "白菜" };

int[] a = new int[4] { 3, 1, -1, 1 };

int[] b = new int[4] { 0, 0, 0, 0 };

Console.WriteLine(" 关于农夫过河的问题");

int weizhi = 0;

do

{

if (a[0] == 3)

{

for (int i = 1; i < 4; i++)

{

if (a[i] == 0 || weizhi == i )

{

continue;

}

b[i] = a[i];

a[i] = 0;

if (a[1]==0&&a[3]==0&&a[2]==0)

{

Console.WriteLine(" 农夫带羊到B岸\n");

}

else if (sum(a) == 3)

{

a[i] = b[i];

b[i] = 0;

}

else

{

if (a[i] == 0)

{

Console.WriteLine(" 农夫带{0}去B岸:\n", wu[i]);

weizhi = i;

break;

}

}

}

a[0] = 0;

b[0] = 3;

}

else

{

if (sum(b) - 3 == 1 || sum(b) - 3 == -1)

{

a[0] = b[0];

b[0] = 0;

Console.WriteLine(" 农空手回去A:\n");

}

else

{

if (sum(b) == 3)

{//带Y ANG回去

a[0] = b[0];

b[0] = 0;

a[2] = b[2];

b[2] = 0;

Console.WriteLine(" 农夫带羊回A岸:\n");

weizhi = 2;

}

else

{

a[0] = b[0];

b[0] = 0;

Console.WriteLine(" 农夫空手回去A:\n");

//农回去

}

}

}

} while (sum(b) != 4);

Console.Read();

}

1

相关文档
最新文档