题型:模拟
注意:
1.使用getchar接收,注意接收回车符。
2.每一个移动操作之后,记得改变空格位置。
3.任重而道远。这道题的难度只是easy,但是对于我来说却不那么容易…
#include<stdio.h>
int main(){
int puzzlecase = 1;
int firstcase = 1;
char temp, cmd;
char puzzle[5][5];
while( (temp=getchar()) != EOF && temp != 'Z' ){
int isok = 1;
int getspace=0;
int col,raw;
puzzle[0][0] = temp;
for(int i=1;i<5;i++){
puzzle[0][i] = getchar();
}
getchar();
for(int i=1; i<5; i++){
for(int j=0; j<5; j++){
puzzle[i][j] = getchar();
}
getchar();
}
//寻找空格键
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(puzzle[i][j] == ' '){
col = i;
raw = j;
getspace = 1;
break;
}
if(getspace == 1)
break;
}
}
while( (cmd = getchar())!= EOF ){
if(cmd == '0')
break;
else if(cmd == 'A'){
if(col == 0){
isok = 0;
break;
}
puzzle[col][raw] = puzzle[col-1][raw];
puzzle[col-1][raw] = ' ';
col = col -1;
}
else if(cmd == 'B'){
if(col == 4){
isok = 0;
break;
}
puzzle[col][raw] = puzzle[col+1][raw];
puzzle[col+1][raw] = ' ';
col = col + 1;
}
else if(cmd == 'R'){
if(raw == 4){
isok = 0;
break;
}
puzzle[col][raw] = puzzle[col][raw+1] ;
puzzle[col][raw+1] = ' ';
raw = raw + 1;
}
else if(cmd == 'L'){
if(raw == 0){
isok = 0;
break;
}
puzzle[col][raw] = puzzle[col][raw-1] ;
puzzle[col][raw-1] = ' ';
raw = raw - 1;
}
}
if(cmd != '0'){
while( (cmd = getchar()) != EOF && cmd != '0');
}
getchar();
if(!firstcase)
printf("\n");
printf("Puzzle #%d:\n",puzzlecase++);
if(!isok)
printf("This puzzle has no final configuration.\n");
else{
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
printf("%c",puzzle[i][j]);
if(j!= 4)
printf(" ");
}
printf("\n");
}
}
firstcase = 0;
}
return 0;
}