UVA - 227 Puzzle
2016-07-04 17:58
330 查看
题目大意:5×5 网格,有一个格子是空的,其他都是字母。一共四种指令:A,B,L,R,分别表示将空格上、下、左、右的字母移到空格中。输入网格和指令(以 0 结束),输出执行指令后的网格。
解题思路:二维数组模拟网格,用一个 char 类型的变量一边读一边执行,读入 0 结束,注意标记非法跳出后实际上并未读入完全,剩余指令会影响下一次的网格。
解题思路:二维数组模拟网格,用一个 char 类型的变量一边读一边执行,读入 0 结束,注意标记非法跳出后实际上并未读入完全,剩余指令会影响下一次的网格。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char map[10][10]; int count = 0; int main() { while (gets(map[0])) { if (map[0][0] == 'Z') break; count++; for (int i = 1; i < 5; i++) gets(map[i]); int x, y; for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) if (map[i][j] == ' ') { x = i; y = j; } char c; int tag=1; while (scanf("%c", &c) && c != '0') { if (c == 'L') { if (y == 0) { tag = 0; break; } map[x][y] = map[x][y-1]; map[x][y-1] = ' '; y--; } if (c == 'R') { if (y == 4) { tag = 0; break; } map[x][y] = map[x][y+1]; map[x][y+1] = ' '; y++; } if (c == 'A') { if (x == 0) { tag = 0; break; } map[x][y] = map[x-1][y]; map[x-1][y] = ' '; x--; } if (c == 'B') { if (x == 4) { tag = 0; break; } map[x][y] = map[x+1][y]; map[x+1][y] = ' '; x++; } } if (!tag) while(c != '0') scanf("%c", &c); if (count != 1) printf("\n"); printf("Puzzle #%d:\n", count); if (!tag) printf("This puzzle has no final configuration.\n"); else for (int i = 0; i < 5; i++){ for (int j = 0; j < 4; j++) printf("%c ", map[i][j]); printf("%c\n", map[i][4]); } memset (map, ' ', sizeof(map)); getchar(); } return 0; }
相关文章推荐
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata
- B.489 - Hangman Judge
- C.445 - Marvelous Mazes
- 1.10494 - If We Were a Child Again
- 2.424 - Integer Inquiry
- 3.10250 - The Other Two Trees
- 5.465 - Overflow
- 6.113 - Power of Cryptography
- 7.10161 - Ant on a Chessboard
- 8.621 - Secret Research
- 9.401 - Palindromes
- A.537 - Artificial Intelligence?