编写程序使全部都带到对岸。(谁愿意指点的话,麻烦尽量将代码写标准,最好能附上点注释,在此多谢了!!!)
我遍了下面这段代码,但不能打印出农夫带哪样东西的顺序,只可以打印出带每样东西到对岸的情况,希望能给你启示,也希望哪位朋友可以帮我改一改下面的代码.
#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,表示结束*/
}