UVA227 Puzzle
问题链接:UVA227 Puzzle。基础训练级的问题,用C语言编写程序。
问题简述:一个5×5的网格,一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列,指令序列以数字0结束,输出指令执行完毕后的网格。如果有非法指令,应输出"This puzzle has no final configuration."。
这个题的问题可能会出在输入处理上。根据实例,输入的指令序列可能是多行的,需要小心处理。
另外一点,当模拟出错时,需要正确处理。模拟出错的情况有两种,一是输入指令错误;二是输入指令虽然正确,而把空格移动到网格外面的情况。
程序中,封装了函数move()用于接受指令,模拟根据指令空格的移动过程。主程序则用于处理输入、输出和整体控制。
AC的C语言程序如下:
/* UVA227 Puzzle */#include <stdio.h>#define MAXN 5char grid[MAXN][MAXN];
int blankrow, blankcol, nextrow, nextcol;// 移动:如果指令正确则移动,并且返回0;否则返回1。
int move(char move)
{if(move == 'A') {nextrow = blankrow - 1;nextcol = blankcol;} else if(move == 'B') {nextrow = blankrow + 1;nextcol = blankcol;} else if(move == 'L') {nextrow = blankrow;nextcol = blankcol - 1;} else if(move == 'R') {nextrow = blankrow;nextcol = blankcol + 1;} elsereturn 1;if(nextrow >= 0 && nextrow < MAXN && nextcol >= 0 && nextcol < MAXN) {grid[blankrow][blankcol] = grid[nextrow][nextcol];grid[nextrow][nextcol] = ' ';blankrow = nextrow;blankcol = nextcol;return 0;} elsereturn 1;
}int main(void)
{int caseno=0, okflag, i, j;char c;while((c=getchar()) != 'Z') {// 读入数据for(i=0; i<MAXN; i++)for(j=0; j<MAXN; j++) {grid[i][j] = c;if(c == ' ' || c == '\n') {blankrow = i;blankcol = j;grid[i][j] = ' ';}c = getchar();if(j == MAXN-1 && c == '\n')c = getchar();}// 模拟过程:一边读入命令行,一边移动okflag = 1;while(c != '0') {if(c != '\n') {if(move(c)){okflag = 0;break;}}c = getchar();if(c == '\n')c = getchar();}while(c != '0') // 跳过‘0’及以前的字符c = getchar();while(c != '\n') // 跳过‘\n’及以前的字符c = getchar();// 输出结果if(++caseno > 1)printf("\n");printf("Puzzle #%d:\n", caseno);if(okflag) {for(i=0; i<MAXN; i++)printf("%c %c %c %c %c\n", grid[i][0], grid[i][1], grid[i][2], grid[i][3], grid[i][4]);} elseprintf("This puzzle has no final configuration.\n");}return 0;
}
转载于:https://www.cnblogs.com/tigerisland/p/7564520.html
UVA227 Puzzle相关推荐
- 算法竞赛入门经典(第二版) | 习题3-5 谜题 (UVa227,Puzzle)(World Finals 1993)
乍一看是一个大水题,但World Finals这两个词标示着老子世界决赛真题虽然题目很水但是数据就能卡死你.整整搞了五个小时,期间经历过崩溃(花了这么多时间搞一道大水题,还没AC),但好在坚持下来了, ...
- ACM题解系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
题是书中的题,解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章例题 POJ1488 UVA272 UVALive5381 TEX Quote[输入输出 ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
- TYUT-A专题题解(一)
TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...
- Competitive Programming 3题解
题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...
- ICPC程序设计题解书籍系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
题是书中的题,部分解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章 数组和字符串(例题) POJ1488 UVA272 UVALive5381 TEX ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
- 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...
- Puzzle——模拟
原题链接: https://vjudge.net/problem/UVA-227 题目描述: 1 > 有一个5*5的网格,只有一个格子是空格,其余的都是字母. 2 > 4个指令 A,B,L ...
最新文章
- [转] Android系统版本号和Android API level对应表
- 我最喜欢的科目是计算机英语,我最喜欢的科目英语作文
- 红米Note增强版出现”无法安装xxx ,请释放一些存储空间并重试“解决
- MySQL(21)--- GROUP BY 语句
- php中什么是时间戳,php中的时间戳转换函数是什么
- ERROR: function group_concat(character varying) does not exist
- python如何删除对象_Python-从列表中删除对象
- mysql存储过程开启事务_mysql的存储过程会自动开启一个事务吗?
- 三菱驱动器参数表_三菱伺服驱动器参数都设置什么啊详细点谢谢
- 如何用决策树模型做数据分析?
- 计算机科学与技术b类大学名单,双一流a类大学和b类大学名单及学科
- HTML禁用浏览器后退功能
- javascript实现锁定网页、密码解锁效果(屏幕保护效果)
- 哨兵二号波段介绍_警告!欧空局发布的哨兵二号卫星L2A产品存在严重问题
- 汇编语言中xor指令_XOR寄存器,寄存器(汇编程序)
- 《算法竞赛进阶指南》刷题记录
- 电脑与树莓派与stm32f4串口通信
- 拼多多之所以壮大,在于淘宝对利益过度痴迷
- BCNF与3NF的区别例子
- 概率论:魏布斯分布Weibull cumulative distribution function