(1)、输入:
1、先一行一行输入(五行);
2、判断是否是Z;
4、再将其存储在二维数组中;
(2)、进行操作指南的输入:
1、以零结尾的一维数组,注意回车;
(3)、再将操作指南一一对比可得:
1、if语句连接:
2、判断是否无效;
(4)、输出:
1、二维数组;其中注意空行;
输入用幂:
TRGSJ
XDOKI
M VLN
WPABE
UQHCF
ARRBBL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAA
LLLL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAAAABBRRRLL0
Z
首先,对于这道题,我遇到很多问题:
(1)、输入我遇到了问题:
1、一开始,我想使用直接输入二阶矩阵。但我不知道怎样输入Z的值。最后我利用了一行一行输入字符串。但我又遇到了问题,这个问题是我利用的是scanf("%s")输入的。但他遇到空格会直接变成另一行。我将它又换成了fgets()来解决它。但我又遇到了问题,它的'\n'会存在于新输入的之中。我将含有‘\n’将它删除,重新赋值;
2、a与c不匹配。我就将那个c匹配成a相等的,从我的方法角度来看就只有这个方法。
3、看我的输出用幂就知道了,这个题目其实有问题。没有明确告诉你,怎样搞,我是在网上找的AC的答案的写出来的。
4、
#include<stdio.h>
#include<string.h>
int main() {
int i=0,j,k,l,m,n,flag=0,ph=0,pl=0;
char a[1000],c[1000],b[1000];
char x[100][100];
int count=0;
while(1){
int error=0;
for(i=0; i<5; i++) {
fgets(a,10,stdin);
if(a[0]=='\n'){
i--;
continue;
}
c[0]='Z';
c[1]='\n';
c[2]='\0';
if(!strcmp(a,c)) {
flag=1;
break;
}
x[i][0]='\0';
for(k=0; k<5; k++) {
x[i][k]=a[k];
if(x[i][k]==' '){
ph=i;
pl=k;
}
}
}
if(flag==1) {
break;
}
int sum=0;
while(1){
scanf("%c",&b[sum]);
if(b[sum]=='0'){
b[sum]='\0';
break;
}
sum++;
}
for(l=0;l<sum;l++){
int ph1=ph,pl1=pl;
char t;
if(b[l]=='A'){
ph--;
}
else if(b[l]=='B'){
ph++;
}
else if(b[l]=='L'){
pl--;
}
else if(b[l]=='R'){
pl++;
}else if(b[l]!='\n'){
error=1;
break;
}
if(pl<0||pl>4||ph<0||ph>4){
error=1;
break;
}
t=x[ph1][pl1];
x[ph1][pl1]=x[ph][pl];
x[ph][pl]=t;
}
if(count!=0){
printf("\n");
}
printf("Puzzle #%d:\n",++count);
if(error==1){
printf("This puzzle has no final configuration.\n");
}
else{
for(m=0;m<5;m++){
for(n=0;n<5;n++){
if(n<4)
printf("%c ",x[m][n]);
else {
printf("%c\n",x[m][n]);
}
}
}
}
}
return 0;
}
TRGSJ
XDOKI
M VLN
WPABE
UQHCF
ARRBBL0
Puzzle #1:
T R G S J
X O K L I
M D V B N
W P A E
U Q H C F
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAA
LLLL0
Puzzle #2:
A B C D
F G H I E
K L M N J
P Q R S O
T U V W X
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAAAABBRRRLL0
Puzzle #3:
This puzzle has no final configuration.
Z