您的位置:首页 > 其它

习题3-5 谜题

2016-07-25 20:26 453 查看
题目:

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指

令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指

令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This

puzzle has no final configuration.”。

心得:

1、WA了很长时间,最后从网上找了几组测试数据发现是第一个格子就是空格的情况没有考虑进去。

2、读题!认真读题!

代码:

#include"stdio.h"
#include"string.h"
int main()
{
int i,j,s=0,l=1,p;
char a[7][7],b[1001],c;
while(scanf("%c",&a[0][0]))
{
if(a[0][0]=='Z') break;
j=0,p=1;
s=0;
for(i=1;i<30;i++)
{
scanf("%c",&a[i/6][i%6]);
if(a[i/6][i%6]==' ')
s=i/6*10+i%6;
}
for(i=0;scanf("%c",&b[i])==1&&b[i]!='0';i++);
scanf("%c",&c);
for(j=0;j<i;j++)
{
if(b[j]=='B')
{
if(s/10+1>4)
{p=0;break;}
a[s/10][s%10]=a[s/10+1][s%10];
a[s/10+1][s%10]=' ';
s=(s/10+1)*10+s%10;
}
if(b[j]=='A')
{
if(s/10-1<0)
{p=0;break;}
a[s/10][s%10]=a[s/10-1][s%10];
a[s/10-1][s%10]=' ';
s=(s/10-1)*10+s%10;
}
if(b[j]=='R')
{
if(s%10+1>4)
{p=0;break;}
a[s/10][s%10]=a[s/10][s%10+1];
a[s/10][s%10+1]=' ';
s=(s/10)*10+s%10+1;
}
if(b[j]=='L')
{
if(s%10-1<0)
{p=0;break;}
a[s/10][s%10]=a[s/10][s%10-1];
a[s/10][s%10-1]=' ';
s=(s/10)*10+s%10-1;
}
}
if(l>1)
printf("\n");
printf("Puzzle #%d:\n",l++);
if(p==0)
printf("This puzzle has no final configuration.\n");
if(p==1)
for(i=0;i<5;i++)
{
printf("%c",a[i][0]);
for(j=1;j<5;j++)
printf(" %c",a[i][j]);
printf("\n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: