算典03_习题_05_Uva-227
2017-02-14 17:12
253 查看
Puzzle
滑动拼图游戏本题不好ac的地方就是输入问题
用gets()输入每一行还好说,主要是后面输入命令的时候,如果 我边输入边判断的话,会出现一种情况是:
当我判断到不合法时,就直接break了,那么它后面的许多字符就会留在输入流,而且可能不止一行,这个时候如果我在下一个数据里用gets()时就会读取到错误的数据
明白这一点基本上就能ac了,只要当判断不合法时不break,直到判断到最后一个,就只可能有一个0留在输入流里了,这时在后面加一个gets()就行了
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char maps[10][10]; int sx, sy, mx, my; bool moves(char c){ switch(c){ case 'A': mx = sx - 1; my = sy; break; case 'B': mx = sx + 1; my = sy; break; case 'L': mx = sx; my = sy - 1; break; case 'R': mx = sx; my = sy + 1; break; } if(mx < 0 || mx >4 || my < 0 || my > 4)return false; maps[sx][sy] = maps[mx][my]; maps[sx=mx][sy=my] = ' '; return true; } bool read(){ for(int i = 0; i < 5; ++i){ gets(maps[i]); if(i == 0 && maps[0][0] == 'Z')return false; } for(int i = 0; i < 5; ++i){ for(int j = 0; j < 5; ++j){ if(maps[i][j] == ' '){ sx = i; sy = j; i = j = 5; } } } return true; } int main(){ #ifdef _LOCAL freopen("in.txt","r", stdin); #endif // _LOCAL bool line = 0; int kase = 0; while(read()){ if(line)printf("\n"); if(!line)line = 1; printf("Puzzle #%d:\n", ++kase); char ch; bool flag = 0; while(ch = getchar()){ if(ch == '0') break; if(ch != 'A' && ch != 'B' && ch != 'L' && ch != 'R') continue; if(!moves(ch)){ flag = 1; } } if(flag){ printf("This puzzle has no final configuration.\n"); gets(maps[0]); continue; } for(int i = 0; i < 5; ++i){ for(int j = 0; j < 5; ++j){ printf("%c", maps[i][j]); if(j != 4) printf(" "); } printf("\n"); } gets(maps[0]); } return 0; }
相关文章推荐
- 算典03_习题_10_UVA-1587
- 紫书章三习题5——UVA 227 Puzzle
- 紫书章三习题5——UVA 227 Puzzle
- 算典03_习题_01_Uva-1585
- 算典03_习题_12_UVA-11809
- 紫书章三习题5——UVA 227 Puzzle
- 算典03_习题_02_Uva-1586
- 紫书章三习题5——UVA 227 Puzzle
- 小紫书 习题 3-5(UVA 227) 谜题(Puzzle)
- 【习题 3-5 UVA-227】Puzzle
- 算典03_习题_11_UVA-1588
- 紫书章三习题5——UVA 227 Puzzle
- 紫书章三习题5——UVA 227 Puzzle
- 紫书章三习题5——UVA 227 Puzzle
- 习题3-5 UVa 227 Puzzle
- 习题3-5 谜题 UVa227
- 算典04_习题_03_UVA-220
- 习题 3-5 谜题 Puzzle (World Finals 1993) UVa 227
- 算典04_习题_05_UVA-1590
- 算法竞赛入门经典(第2版)习题3-5 谜题 Puzzle UVa227