编写程序使全部都带到对岸。(谁愿意指点的话,麻烦尽量将代码写标准,最好能附上点注释,在此多谢了!!!)
----------------解决方案--------------------------------------------------------
没人来指点指点吗?
----------------解决方案--------------------------------------------------------
我想到的算法是状态转移法
----------------解决方案--------------------------------------------------------
我想要完整的代码
----------------解决方案--------------------------------------------------------
我遍了下面这段代码,但不能打印出农夫带哪样东西的顺序,只可以打印出带每样东西到对岸的情况,希望能给你启示,也希望哪位朋友可以帮我改一改下面的代码.
#include<stdio.h>
#include<string.h>
int
main(void)
{
/*分别定义四个字符串数组来存储题目中四个名字*/
char str_1[]={"Lang"};
char str_2[]={"Yang"};
char str_3[]={"Cai"};
char str_4[]={"Nongfu"};
/*定义四个变量,变量的值可以是1和0**
**1表示在原岸,0表示在对岸**********
**即1表示没有过河,0表示过了河******/
int Lang_flag;
int Yang_flag;
int Cai_flag;
int Nongfu_flag;
/*根据题目所述,农夫不在的时候,狼和羊不可以同时在,
**羊和菜不可以同时在,狼和菜可以同时存在****************
**所以采用四个循环,分在和不在两种情况******************
**再采用IF判断语句,如果农夫不在,狼在羊不在,羊在菜不在
**这几种情况必须同时为真才符合题目要求,所以用&&符号****/
for(Lang_flag=0;Lang_flag<=1;Lang_flag++)
for(Yang_flag=0;Yang_flag<=1;Yang_flag++)
for(Cai_flag=0;Cai_flag<=1;Cai_flag++)
for(Nongfu_flag=0;Nongfu_flag<=1;Nongfu_flag++)
{
if(((Lang_flag&&!Yang_flag)||(!Lang_flag&&Yang_flag))&&
((Yang_flag&&!Cai_flag)||(!Yang_flag&&Cai_flag))&&Nongfu_flag)
{
/*因为无法判断农夫要带几次过河,所以用DO循环*****
**当狼,羊,菜都不在原岸的时候表示全部过了河*****
**这种情况下跳出DO循环***************************/
do
{
/*用表达式?a:b来选择打印的内容*/
printf("%s has been taken.\n",Yang_flag?"Lang":"Yang");
printf("%s has been taken.\n",Cai_flag?"Yang":"Cai");
}while((Lang_flag||Yang_flag||Cai_flag)==0);
}
}
return 0;/*函数返回0,表示结束*/
}
----------------解决方案--------------------------------------------------------
我记得那时候上数学建模,他用了一个D开头的算法(具体的给忘了)
不过我也忘记怎么做了,
----------------解决方案--------------------------------------------------------
多谢lj_860603的帮忙啊,可是你那样只能显示出运行到最后的结果,
我运行了一下试了,结果只有Lang has been taken
Cai has been taken
Yang has been taken
Yang has been taken
也许是我的意思没表达清楚吧,就像你说的那样,用0和1来表示在还是不在,
譬如说狼羊菜用000表示,对岸对应的用111表示到了对岸,程序运行第一步的
时候应该能显示出是怎么带的,运行后应有如下显示:
111
000 (这个表示狼羊菜都在原岸)
101
010 (经过判断将羊带到对岸)
001
110 (经过判断将狼带到对岸)
011
100 (此时狼会吃羊,所以将羊带会,切注意刚带来的狼不能再带回,否则会无限循环)
010
101 (同上判断,将菜带到对岸)
000
111 (程序完成,全部带到对岸)
完整的我想最好能是这样,不应该光只有结果,要不那就太简单了,
不过在这还是很感谢 lj_860603 的帮助和启发
----------------解决方案--------------------------------------------------------