这道题我做了好久,就是对字符串的输入格式不是很清楚。题的难度不是很大,就是这个输入输出难度大;
1输入字符串必须包含空格,所以用gets输入;
2输入move字符串是可能有空格也有回车,它必须是遇到0才退出输入;所以我用的scanf输入,还用了一个计数cnt;
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[6][6];
char b[1000];
int kase=1;
while(gets(a[0]))
{
if(a[0][0]=='Z')
break;
int i,j;
for(i=1;i<5;i++)
gets(a[i]);
int x,y;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(a[i][j]==' ')
{
x=i;y=j;
}
}
}
int flag=1;
int cnt=0;
char m;
while(~scanf("%c",&m))
{
b[cnt]=m;
if(m=='0')
break;
if(m=='\n'||m==' ')
cnt--;
cnt++;
}
for(i=0;i<cnt;i++)
{
if(b[i]!='A'&&b[i]!='B'&&b[i]!='L'&&b[i]!='R')
{
flag=0;break;
}
if(b[i]=='A')
{
if(x-1<0)
{
flag=0;break;
}
else
{
a[x][y]=a[x-1][y];
a[x-1][y]=' ';
x=x-1;
}
continue;
}
if(b[i]=='B')
{
if(x+1>4)
{
flag=0;break;
}
else
{
a[x][y]=a[x+1][y];
a[x+1][y]=' ';
x=x+1;
}
continue;
}
if(b[i]=='L')
{
if(y-1<0)
{
flag=0;break;
}
else
{
a[x][y]=a[x][y-1];
a[x][y-1]=' ';
y=y-1;
}
continue;
}
if(b[i]=='R')
{
if(y+1>4)
{
flag=0;break;
}
else
{
a[x][y]=a[x][y+1];
a[x][y+1]=' ';
y=y+1;
}
continue;
}
}
if(kase==1)
printf("Puzzle #%d:\n",kase);
else
printf("\nPuzzle #%d:\n",kase);
if(flag==0)
printf("This puzzle has no final configuration.\n");
else
{
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%c ",a[i][j]);
printf("%c\n",a[i][4]);
}
}
kase++;
getchar();
}
return 0;
}