《求助》新到不行的新手——三个传教士和三个恶魔过河的问题
好吧。这是一个很旧的问题。本人很早以前也看过。但今天叫我用C语言编的时候。我是不行了。由于小弟刚刚入门。学的很少。只学了基本。也就是请各位大咖只用 WHILE ,IF,FOR,SCANF,PRINTF这几个修改一下。。跪求了。这是作业算分的。。
小弟卡在两个点。一是怎样在玩家输错(输错是指将人数变成负数的情况)之后还能再次输入并继续游戏。(完全无奈)。。 ╮(╯▽╰)╭
二是怎样在玩家失败后按6重新开始和按7退出。小弟尝试了一下。却并没有成功。。。总是跳出循环。
看的下去的人请帮帮我吧
#include<stdio.h>
int main()
{
printf( "三个传教士和三个吃人恶魔过河 \n");
int a,b,c,d,x,y,z;
a=3;b=3;c=0;d=0;x=2;z=6;
printf(" %d传教士 %d恶魔 \n"
"----------- 船 \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- \n"
" %d传教士 %d恶魔 \n ",a,b,c,d );
printf("Menu: [1] 恶 [2]传 [3] 两个恶 [4] 两个传 [5] 一传一魔 \n"
"请按一个选择 再按enter");
scanf("%d",&y);
while(a<=3&&b<=3&&c<=3&&d<=3&&z==6)
{ /* 北岸开始。北岸到南岸 */
if(x%2==0){
if(y==1){
b=b-1; d=d+1;x=x+1;
}
else if(y==2){
a=a-1; c=c+1;x=x+1;
}
else if(y==3){
b=b-2; d=d+2;x=x+1;
}
else if(y==4){
a=a-2; c=c+2;x=x+1;
}
else if(y==5){
a=a-1;c=c+1;
b=b-1;d=d+1;x=x+1;
}
if(a<b&&a!=0&&a>=0&&b>=0&&c>=0&&d>=0){ /* 如果,北岸,传教士人数少于恶魔 */
printf(" 0传教士 %d恶魔 \n"
"----------- \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- 船\n"
" %d传教士 %d恶魔 \n ",b,c,d );
printf("失败, %d 个传教士在北岸被吃 \n",a);
printf("按6重新开始游戏,按7退出游戏");
scanf("%d",&z);if(z==6){a=3;b=3;c=0;d=0;x=2;};
}
else if(c<d&&c!=0&&a>=0&&b>=0&&c>=0&&d>=0){/* 如果,南岸,传教士人数少于恶魔 */
printf(" %d传教士 %d恶魔 \n"
"----------- \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- 船\n"
" 0传教士 %d恶魔 \n ",a,b,c,d );
printf("失败, %d 个传教士在南岸被吃 \n",c);
printf("按6重新开始游戏,按7退出游戏");
scanf("%d",&z);if(z==6){a=3;b=3;c=0;d=0;x=2;};
}
else if(a>=0&&b>=0&&c>=0&&d>=0){printf(
" %d传教士 %d恶魔 \n"
"----------- \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- 船\n"
" %d传教士 %d恶魔 \n ",a,b,c,d );
if(a==0&&b==0){x=x-2;
printf("恭喜你成功在%d次过河后讲传教士和恶魔传到对岸"
"最优秀的成绩是 11 次.",x);
printf("按6重新开始游戏,按7退出游戏");
scanf("%d",&z);if(z==6){a=3;b=3;c=0;d=0;x=2;};
}
else{ printf("Menu: [1] 恶 [2]传 [3] 两个恶 [4] 两个传 [5] 一传一魔 \n"
"请按一个选择 再按enter");
scanf("%d",&y); }
}
}
/* 当船从南岸回来时,至少要有一个人在船上 */
else if(x%2==1){
if(y==1){
d=d-1; b=b+1;x=x+1;
}
else if(y==2){
c=c-1; a=a+1;x=x+1;
}
else if(y==3){
d=d-2; b=b+2;x=x+1;
}
else if(y==4){
c=c-2; a=a+2;x=x+1;
}
else if(y==5){
c=c-1;a=a+1;
d=d-1;b=b+1;x=x+1;
}
if(a<b&&a!=0&&a>=0&&b>=0&&c>=0&&d>=0){/* 如果,北岸,传教士人数少于恶魔 */
printf(" 0传教士 %d恶魔 \n"
"----------- \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- 船\n"
" %d传教士 %d恶魔 \n ",b,c,d );
printf("失败, %d 个传教士在北岸被吃",a);
printf("按6重新开始游戏,按7退出游戏");
scanf("%d",&z);if(z==6){a=3;b=3;c=0;d=0;x=2;};
}
else if(c<d&&c!=0&&a>=0&&b>=0&&c>=0&&d>=0){/* 如果,南岸,传教士人数少于恶魔*/
printf(" %d传教士 %d恶魔 \n"
"----------- \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- 船\n"
" 0传教士 %d恶魔 \n ",a,b,c,d );
printf("失败, %d 个传教士在南岸被吃",c);
printf("按6重新开始游戏,按7退出游戏");
scanf("%d",&z);if(z==6){a=3;b=3;c=0;d=0;x=2;};
}
else if(a>=0&&b>=0&&c>=0&&d>=0){printf(
" %d传教士 %d恶魔 \n"
"-----------船 \n"
" ~ ~ ~ \n"
" ~ ~ ~ \n"
"----------- \n"
" %d传教士 %d恶魔 \n ",a,b,c,d );
printf("Menu: [1] 恶 [2]传 [3] 两个恶 [4] 两个传 [5] 一传一魔 \n"
"请按一个选择 再按enter");
scanf("%d",&y);
}
}
if(x>22){printf("失败。你超出了20次过河的次限");}
}
printf("谢谢");
return 0;
}
希望各位高手能搭把手救救我。
[ 本帖最后由 foloway 于 2015-4-4 08:07 编辑 ]