UVa 227 Puzzle(谜题)
来源:互联网 发布:40岁学编程 没公司要 编辑:程序博客网 时间:2024/04/30 01:06
UVa 227 Puzzle(谜题)
UVa题目链接
题目名称:谜题
题目描述:
有一个55的网格,其中恰好有一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(分别以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出"This puzzle has no final configuration.",例如,图执行ARRBBL0后,效果如图所示
题目分析:题目需要做的事情
①输入55的字符,每个格子有一个字母,有一个格子是空格
②找出输入字符空格的具体位置,保存下来
③之后分别检测指令A,B,L,R,这里还需要注意边界的地方,
④最后根据指令进行移动,最后从新输出每个格子的每个字符
学习笔记:
①这道题跟以前那道填数字的题目,有区别,因为题目中需要两个输入,格子形状输入用gets(a[i])表示第几行。输出的时候可以采用循环printf("%c %c %c %c %c\n", a[i][0], a[i][1], a[i][2], a[i][3], a[i][4]); 注意这里输入不能用scanf因为有一个是空格。这样就输出我们需要的结果了。
②对于检测指令,第一步是如果是非法指令,但是我们不好描述条件时,输出,这个时候为了和和发指令区分开来,所以我们设置了一个flag,如果非法时,我们设为0这样最后输出的时候,我们就有条件
③检测指令的时候,还需要注意边界问题,记住a[x][y] x代表的是竖直方向,y代表的是水平方向。一定要注意边界问题
④检测到指令的时候,我们首先需要将空格移动到目标位置的值放在空格区域,之后把空格放入目标区域这个与以前填数多一步,因为以前那个目标区域全是0
==============================================================================
参考代码:
//.c#include <stdio.h>#include <string.h>#define maxn 20#define command 10000char a[maxn][maxn];char s[command];int main(){ int blank_x = 0, blank_y = 0; int flag = 1; //先输入值 /*for(int x=0; x<5; x++) { for(int y=0; y<5; y++) { scanf("%c",&a[x][y]); } }*/ //************************************ gets(a[0]); gets(a[1]); gets(a[2]); gets(a[3]); gets(a[4]); //检测空格的位置 for(int x=0; x<5; x++) { for(int y=0; y<5; y++) { if(a[x][y] == ' ') { blank_x = x; blank_y = y; } } } //输入指令 gets(s); int len = strlen(s); for(int i = 0; i < len; i++) { if(s[len-1] == '0' || s[i] == 'A' || s[i] == 'R' || s[i] == 'B' || s[i] == 'L' ) { if(s[i] == 'A' && blank_x != 0) { a[blank_x][blank_y] = a[blank_x-1][blank_y]; a[--blank_x][blank_y] = ' '; } if(s[i] == 'R' && blank_y != 4) { a[blank_x][blank_y] = a[blank_x][blank_y+1]; a[blank_x][++blank_y] = ' '; } if(s[i] == 'B' && blank_x != 4) { a[blank_x][blank_y] = a[blank_x+1][ blank_y]; a[++blank_x][ blank_y] = ' '; } if(s[i] == 'L' && blank_y != 0) { a[blank_x][blank_y] = a[blank_x][ blank_y-1]; a[blank_x][--blank_y] = ' '; } } else flag = 0; } if(flag) { for(int i = 0; i < 5; i++) { printf("%c %c %c %c %c\n", a[i][0], a[i][1], a[i][2], a[i][3], a[i][4]); } } else printf("This puzzle has no final configuration.\n");return 0;}
- UVa 227 Puzzle(谜题)
- UVa 227 Puzzle(谜题)
- 谜题(Puzzle, UVa 227)算法
- UVa 227 Puzzle(拼图游戏)
- (入门)uva 227 Puzzle
- UVa 227 Puzzle(习题3-5)
- UVa 227 Puzzle(小心输入输出!)
- UVa 227 - Puzzle
- UVa 227 - Puzzle
- Uva-227-Puzzle
- UVa 227 Puzzle
- UVA - 227 Puzzle
- Uva-227 - Puzzle-AC
- UVa 227 - Puzzle
- UVa-227 - Puzzle
- 【Uva 227】 Puzzle
- UVa 227 - Puzzle
- UVa 227 Puzzle
- UML时序图
- “IOS”开发中,有关UITableView方面的空件的使用!
- hadoop不同版本间文件复制
- Oracle 使用笔记
- 闭式冷却塔的防冻问题
- UVa 227 Puzzle(谜题)
- java调用js
- 弹出文件选择对话框(支持多选)
- uva 755 487--3279(字母与数字处理)
- 闭式冷却塔配件
- mysql 根据中英文首字母检索
- hadoop用job文件方式提交任务
- 技术很大程度上完败清晰的思路
- 推荐TED演讲:20岁光阴不再来(Why 30 is not the new 20)