题解:挺水的一道题,不过有两个坑;
一是输入的数组 空格 如果在行末的时候,是不输出的,如样例2;
二是输入的指令可能分多行输入,如样例2;
#include <iostream>
#include <cstdio>
#include <cstring>
char c, s[10][10];
char cmd[1111];
int main()
{
int kase=0;
while(gets(s[0]))
{
if(s[0][0]=='Z') break;
if(strlen(s[0])==4) s[0][4]=' ';
for(int i=1; i<5; i++)
{
gets(s[i]);
if(strlen(s[i])==4) s[i][4]=' ';
}
int x,y;
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
if(s[i][j]==' ') { x=i; y=j; }
int flag=0;
while(gets(cmd))
{
int len=strlen(cmd);
for(int i=0; i<len; i++)
{
if(cmd[i]=='A')
{
if(x-1>=0) { s[x][y]=s[x-1][y]; x--; }
else { flag=1; break; }
}
else if(cmd[i]=='B')
{
if(x+1<5) { s[x][y]=s[x+1][y]; x++; }
else { flag=1; break; }
}
else if(cmd[i]=='L')
{
if(y-1>=0) { s[x][y]=s[x][y-1]; y--; }
else { flag=1; break; }
}
else if(cmd[i]=='R')
{
if(y+1<5) { s[x][y]=s[x][y+1]; y++; }
else { flag=1; break; }
}
}
if(cmd[len-1]=='0') break;
}
s[x][y]=' ';
if(kase) printf("\n");
printf("Puzzle #%d:\n",++kase);
if(flag) printf("This puzzle has no final configuration.\n");
else
{
for(int i=0; i<5; i++)
{
for(int j=0; j<4; j++)
printf("%c ",s[i][j]);
printf("%c\n",s[i][4]);
}
}
}
return 0;
}