算法竞赛入门经典(第二版) 习题3-5 谜题(Puzzle) UVa227 Finals1993
来源:互联网 发布:企查查软件下载 编辑:程序博客网 时间:2024/06/04 20:37
Page 57
Description
一个5*5的网格中恰好有一个格子是空的,其他格子各有一个字母,四条指令A,B,L,R分别表示将空格上、下、左、右移动。输入初始网格(以Z结束)和一串指令(以0结束),输出执行操作后的网格。越界则输出“This puzzle has no final configuration.”。
Sample Input
TRGSJXDOKIM VLNWPABEUQHCFARRBBL0ABCDEFGHIJKLMNOPQRSTUVWXAAALLLL0ABCDEFGHIJKLMNOPQRSTUVWXAAAAABBRRRLL0Z
Sample Output
Puzzle #1:T R G S JX O K L IM D V B NW P A EU Q H C FPuzzle #2: A B C DF G H I EK L M N JP Q R S OT U V W XPuzzle #3:This puzzle has no final configuration.
Note
不得不承认final的题就是不一样Orz,就算不难,半小时写好框架却花了一下午时间找bug,修改了N次后还是WA,我想到有可能是PE只是评测系统返回WA。
Separate output from different puzzle records by one blank line.
这句话就是罪魁祸首,其实它的意思是将输出和puzzle用一行隔开,然而我以为应该是这样输出的:
尼玛以前不都是这么输出的么!!Too young too simple...(PS这种输出格式实在找不到一种判断方法让最后不输出空行)
后来想了想,换了一种输出格式:
这样应该对了吧?又WA了!其实想想也应该是错的,因为它重定向后其实等于这样输出:
看到没?第一个输出前面不应该有空行。所以只要第一个不输出空行就可以AC啦。BTW,这样的输出格式有个好处,就是解决了这种输入格式怎么防止最后一个输出空行的问题~不愧是finals题 Orz
这题主要还是细节问题,比如如果puzzle的空格在一行中的最后,那么输出其实输到第4个就不用输了,所以第5个元素a[i][4]相当于'\0',此时要把它换成空格才好处理。另外由于输入中有空格,所以要用gets()。
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>using namespace std;#define max 105char s[max],ss[max];char a[10][10],t;int main(){ //freopen("in.txt","r",stdin); int i,j,l,m,n,cas=0;loop: while(gets(a[0])){ //while(gets()) if(a[0][0]=='Z') break; for(i=1;i<5;i++) gets(a[i]); for(i=0;i<5;i++){ if(a[i][4]==0) {a[i][4]=' ';m=i;n=4;break;} for(j=0;j<5;j++) if(a[i][j]==' ') {m=i;n=j;break;} } gets(s); l=strlen(s); while(s[l-1]!='0'){ //保证指令可以分行输入 gets(ss); strcat(s,ss); l=strlen(s); } if(cas!=0) putchar(10); i=0; while(s[i]!='0'){ switch (s[i]){ case 'A':{ if(m-1>=0) {t=a[m][n];a[m][n]=a[m-1][n];a[m-1][n]=t;m--;} else {printf("Puzzle #%d:\nThis puzzle has no final configuration.\n",++cas);goto loop;} break; } case 'B':{ if(m+1<5) {t=a[m][n];a[m][n]=a[m+1][n];a[m+1][n]=t;m++;} else {printf("Puzzle #%d:\nThis puzzle has no final configuration.\n",++cas);goto loop;} break; } case 'L':{ if(n-1>=0) {t=a[m][n];a[m][n]=a[m][n-1];a[m][n-1]=t;n--;} else {printf("Puzzle #%d:\nThis puzzle has no final configuration.\n",++cas);goto loop;} break; } case 'R':{ if(n+1<5) {t=a[m][n];a[m][n]=a[m][n+1];a[m][n+1]=t;n++;} else {printf("Puzzle #%d:\nThis puzzle has no final configuration.\n",++cas);goto loop;} break; } } i++; } printf("Puzzle #%d:\n",++cas); for(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]); } return 0;}执行结果:
2 0
- 算法竞赛入门经典(第二版) 习题3-5 谜题(Puzzle) UVa227 Finals1993
- 算法竞赛入门经典(第2版)习题3-5 谜题 Puzzle UVa227
- 算法竞赛入门经典(第2版)习题3-5 谜题(Puzzle) Uva227
- 《算法竞赛入门经典2ndEdition 》习题3-5 谜题(Puzzle, Uva227)
- 算法竞赛入门经典(刘汝佳)习题3-5 UVa227
- 算法竞赛入门经典(第二版) 习题
- 算法竞赛入门经典(第二版)第一章课后习题
- 算法竞赛入门经典 第二版 习题5-3 卡片游戏 Throwing cards away I uva10935
- 《算法竞赛入门经典(第二版)》第三章 习题(1-5)
- 算法竞赛入门经典(第二版) 习题3-2 分子量(Molar Mass) UVa1586
- 算法竞赛入门经典(第二版) 习题3-4 周期串(Periodic Strigs) UVa455
- 算法竞赛入门经典(第二版) 习题3-8 循环小数(Repeating Decimals) UVa202 Finals1990
- 算法竞赛入门经典(第二版) 习题3-11 换低档装置(Kickdown) UVa1588 NEERC2006
- 算法竞赛入门经典第二章习题
- 算法竞赛入门经典习题 第二章
- 算法竞赛入门经典习题3-5
- 算法竞赛入门经典(第二版) 习题训练
- 【算法竞赛入门经典第二版学习】第三章习题
- 大学生投注“互联网+”营销QQ推动传统企业转型
- macox下编译snappy静态库
- [笔记][Java7并发编程实战手册]2.4在同步代码中使用条件-生产者与消费者
- Leetcode -- Integer to Roman
- HTML5的canvas实现一个球的左右移动
- 算法竞赛入门经典(第二版) 习题3-5 谜题(Puzzle) UVa227 Finals1993
- Spring AOP(2)动态代理
- JS实现动态添加图片上传,多个单图添加
- UVA 11624
- ZOJ 题目3228 Searching the String(AC自动机,子川匹配个数)
- hdoj-1686 Oulipo
- 9.9递归和动态规划(一)——小孩上楼梯的方式的种类
- 一道签到题
- 代码优化:性能优化不是丑陋代码的遮羞布!