题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19191
其实,就是给你个矩阵,然后把里面的空格按照输入的指令移动,输出最后的矩阵,如果有的指令不合理,就输出一条信息。
但是,果然字符串的处理能力很弱啊,搞了半天,要么就是输入不对,要么就是输出不对,最后还WA了个格式不对······
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int judge(int a,int b)
{
if(a<5&&a>=0&&b<5&&b>=0) return 1;
return 0;
}
char s[10][10];
int main()
{
int kk=0;
while(1)
{
memset(s,0,sizeof(s));
int ans=0;
int nut=0;
int k=0;
int p=0;
for(k=0;k<5;k++)
{
for(p=0;p<5;p++)
{
scanf("%c",&s[k][p]);
if(s[0][0]=='Z') break;
if(s[k][p]==' ')
{
ans=k;
nut=p;
}
}
getchar();
if(s[0][0]=='Z') break;
}
if(s[0][0]=='Z') break;
char str;
int flag=0;
while(1)
{
scanf("%c",&str);
if(str=='0') break;
if(str=='A')
{
if(!judge(ans-1,nut)) flag=1;
else
{
s[ans][nut]=s[ans-1][nut];
ans--;
}
}
else if(str=='B')
{
if(!s[ans+1][nut]) flag=1;
else
{
s[ans][nut]=s[ans+1][nut];
ans++;
}
}
else if(str=='R')
{
if(!judge(ans,nut+1)) flag=1;
else
{
s[ans][nut]=s[ans][nut+1];
nut++;
}
}
else if(str=='L')
{
if(!s[ans][nut-1]) flag=1;
else
{
s[ans][nut]=s[ans][nut-1];
nut--;
}
}
s[ans][nut]=' ';
}
if(kk++) printf("\n");
printf("Puzzle #%d:\n",kk);
if(flag) printf("This puzzle has no final configuration.\n");
else
{
flag=0;
for(int i=0;i<5;i++)
{
flag=0;
for(int j=0;j<5;j++)
{
if(flag) printf(" %c",s[i][j]);
else
{
flag=1;
printf("%c",s[i][j]);
}
}
printf("\n");
}
}
getchar();
}
return 0;
}