模拟整个过程,长度为5我就傻傻地开了[5][5]的数组,醉了,忘了是字符串长度+1吗…
还有就是读入那串操作指令之后,我是读到0结束的,但是我其他地方用的gets,所以要把0后面那个回车也吸收一下。。。
最后在输出格式上WA了。。。也是没有想到,,,是我的锅…
WA的一个原因就是,每个情况输出后要额外加一个空行,但是最后一个情况后面不能有空行,否则就会WA,
所以解决办法是,除了第一个之外,其他的情况在开始输出前,都先输出一个空行,就ok了
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int main() { // freopen("input.txt", "r", stdin); int cnt = 0; char puzzle[5][6]; char oper[1000]; while (1) { memset(puzzle, 0, sizeof(puzzle)); memset(oper, 0, sizeof(oper)); gets(puzzle[0]); if (puzzle[0][0] == 'Z'&&puzzle[0][1] == '\0') break; for (int i = 1; i < 5; i++) gets(puzzle[i]); /*for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j != 0) printf(" "); printf("%c", puzzle[i][j]); } printf("\n"); }*/ int bx = -1, by = -1; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (puzzle[i][j] == ' ' || puzzle[i][j] == '\0') { puzzle[i][j] = ' '; bx = i; by = j; break; } } } int opn = 0, c; bool flag = 0; while (c = getchar()) { if (c == '0') break; if (c == 'A' || c == 'B' || c == 'L' || c == 'R') oper[opn++] = c; } while (c = getchar()) { if (c == '\n') break; } /*for (int i = 0; i < opn; i++) printf("%c", oper[i]); printf("\n");*/ for (int i = 0; i < opn; i++) { if (flag) break; switch (oper[i]) { case 'A': if (bx <= 0) flag = 1; else { puzzle[bx][by] = puzzle[bx - 1][by]; bx--; puzzle[bx][by] = ' '; } break; case 'B': if (bx >= 4) flag = 1; else { puzzle[bx][by] = puzzle[bx + 1][by]; bx++; puzzle[bx][by] = ' '; } break; case 'L': if (by <= 0) flag = 1; else { puzzle[bx][by] = puzzle[bx][by - 1]; by--; puzzle[bx][by] = ' '; } break; case 'R': if (by >= 4) flag = 1; else { puzzle[bx][by] = puzzle[bx][by + 1]; by++; puzzle[bx][by] = ' '; } break; } if (flag) { // printf("i %d bx %d by %d\n", i, bx, by); } } if (cnt++) printf("\n"); printf("Puzzle #%d:\n", cnt); if (flag) { printf("This puzzle has no final configuration.\n"); } else { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j != 0) printf(" "); printf("%c", puzzle[i][j]); } printf("\n"); } } } // while (1); // system("pause"); return 0; }