這道題目也是一道比較簡單的題目,但是其中涉及很多個情況判斷。
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
int i,j,leng,fgi,fgj,puzz = 1,PD =1;
char a[6][6],order[100],pa[6];
while(gets(pa) != NULL && strcmp(pa, "Z") != 0)
{
if(strlen(pa) == 1)
return 0;
for(i = 0 ;i < 5;i++)
a[0][i] = pa[i];
gets(pa);
for(i = 0 ;i < 5;i++)
a[1][i] = pa[i];
gets(pa);
for(i = 0 ;i < 5;i++)
a[2][i] = pa[i];
gets(pa);
for(i = 0 ;i < 5;i++)
a[3][i] = pa[i];
gets(pa);
for(i = 0 ;i < 5;i++)
a[4][i] = pa[i];
goto start;
start:
gets(order);
leng = strlen(order);
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
if(a[i][j] == ' ')
{
fgi = i;
fgj = j;
goto loop;
}
}
goto loop;
loop:
for(i = 0; i < leng-1; i++)
{
if(order[i] == 'A')
{
if(fgi == 0)
PD = 0; //我曾一度在這裏直接判斷沒有結果然後輸出,但是這樣做違反了題目會有多行移動指令的要求,被這個問題卡了很久。
else
{
a[fgi][fgj] = a[fgi-1][fgj];
a[fgi-1][fgj] = ' ';
fgi = fgi-1;
}
}
if(order[i] == 'B')
{
if(fgi == 4)
PD = 0;
else
{
a[fgi][fgj] = a[fgi+1][fgj];
a[fgi+1][fgj] = ' ';
fgi = fgi+1;
}
}
if(order[i] == 'R')
{
if(fgj == 4)
PD = 0;
else
{
a[fgi][fgj] = a[fgi][fgj+1]; //這裏原來先是用temp做中間變量,然後倒換,但是會有崩潰問題,爲何不知,只是想到了這個直接倒換的辦法。
a[fgi][fgj+1] = ' ';
fgj = fgj+1;
}
}
if(order[i] == 'L')
{
if(fgj == 0)
PD = 0;
else
{
a[fgi][fgj] = a[fgi][fgj-1];
a[fgi][fgj-1] = ' ';
fgj = fgj-1;
}
}
}
if(order[i] == '0')
goto endstep;
else
{
if(order[i] == 'A')
{
if(fgi == 0)
PD = 0;
else
{
a[fgi][fgj] = a[fgi-1][fgj];
a[fgi-1][fgj] = ' ';
fgi = fgi-1;
}
}
if(order[i] == 'B')
{
if(fgi == 4)
PD = 0;
else
{
a[fgi][fgj] = a[fgi+1][fgj];
a[fgi+1][fgj] = ' ';
fgi = fgi+1;
}
}
if(order[i] == 'R')
{
if(fgj == 4)
PD = 0;
else
{
a[fgi][fgj] = a[fgi][fgj+1];
a[fgi][fgj+1] = ' ';
fgj = fgj+1;
}
}
if(order[i] == 'L')
{
if(fgj == 0)
PD = 0;
else
{
a[fgi][fgj] = a[fgi][fgj-1];
a[fgi][fgj-1] = ' ';
fgj = fgj-1;
}
}
goto start;
}
endstep:
if(PD != 1)
{
if(puzz != 1)
printf("\n"); //這裏如果不能處理好空格問題會wrong answer.
printf("Puzzle #%d:\n",puzz);
printf("This puzzle has no final configuration.\n");
PD = 1;
}
else
{
if(puzz != 1)
printf("\n");
printf("Puzzle #%d:\n",puzz);
for(i = 0; i < 5; i++)
{
for(j = 0; j < 4; j++)
printf("%c ",a[i][j]);
printf("%c\n",a[i][4]);
}
}
goto bk;
bk:
puzz++;
}
}
by
AZ..呆瓜看呆瓜,呆瓜愛呆瓜。