C# 关于农夫过河的问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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