Puzzle 

A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained 24 small squares of equal size. A unique letter of the alphabet was printed on each small square. Since there were only 24 squares within the frame, the frame also contained an empty position which was the same size as a small square. A square could be moved into that empty position if it were immediately to the right, to the left, above, or below the empty position. The object of the puzzle was to slide squares into the empty position so that the frame displayed the letters in alphabetical order.

The illustration below represents a puzzle in its original configuration and in its configuration after the following sequence of 6 moves:

 1) 		 The square above the empty position moves.

2) The square to the right of the empty position moves.

3) The square to the right of the empty position moves.

4) The square below the empty position moves.

5) The square below the empty position moves.

6) The square to the left of the empty position moves.

Write a program to display resulting frames given their initial configurations and sequences of moves.

Input

Input for your program consists of several puzzles. Each is described by its initial configuration and the sequence of moves on the puzzle. The first 5 lines of each puzzle description are the starting configuration. Subsequent lines give the sequence of moves.

The first line of the frame display corresponds to the top line of squares in the puzzle. The other lines follow in order. The empty position in a frame is indicated by a blank. Each display line contains exactly 5 characters, beginning with the character on the leftmost square (or a blank if the leftmost square is actually the empty frame position). The display lines will correspond to a legitimate puzzle.

The sequence of moves is represented by a sequence of As, Bs, Rs, and Ls to denote which square moves into the empty position. A denotes that the square above the empty position moves; B denotes that the square below the empty position moves; L denotes that the square to the left of the empty position moves; R denotes that the square to the right of the empty position moves. It is possible that there is an illegal move, even when it is represented by one of the 4 move characters. If an illegal move occurs, the puzzle is considered to have no final configuration. This sequence of moves may be spread over several lines, but it always ends in the digit 0. The end of data is denoted by the character Z.

Output

Output for each puzzle begins with an appropriately labeled number (Puzzle #1Puzzle #2, etc.). If the puzzle has no final configuration, then a message to that effect should follow. Otherwise that final configuration should be displayed.

Format each line for a final configuration so that there is a single blank character between two adjacent letters. Treat the empty square the same as a letter. For example, if the blank is an interior position, then it will appear as a sequence of 3 blanks - one to separate it from the square to the left, one for the empty position itself, and one to separate it from the square to the right.

Separate output from different puzzle records by one blank line.

Note: The first record of the sample input corresponds to the puzzle illustrated above.

Sample Input

TRGSJ
XDOKI
M VLN
WPABE
UQHCF
ARRBBL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAA
LLLL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAAAABBRRRLL0
Z

Sample Output

Puzzle #1:
T R G S J
X O K L I
M D V B N
W P A E
U Q H C F Puzzle #2:
A B C D
F G H I E
K L M N J
P Q R S O
T U V W X Puzzle #3:
This puzzle has no final configuration. 这个题目仔细一点就不会错了
我第一次做的时候忽视了一种情况,就是刚开始运行的时候就算超出边框了,还得继续输入,
#include<stdio.h>
#include<string.h> char str[10][10];
char Deal[3000];
char ch;
int ErrorFlag;
int x,y;
int Flag;
int main()
{
Flag=0;
while((gets(str[0]))!=NULL&&strcmp(str[0],"Z"))
{
ErrorFlag=0;
for(int j=0; j<strlen(str[0]); j++)
if(str[0][j]==' ')
{
x=0;
y=j;
}
for(int i=1; i<5; i++)
{
gets(str[i]);
for(int j=0; j<strlen(str[i]); j++)
if(str[i][j]==' ')
{
x=i;
y=j;
}
}
while(gets(Deal)!=NULL)
{
for(int i=0; i<strlen(Deal); i++)
{
if(Deal[i]=='A')
{
if(x==0)
{
ErrorFlag=1;
break;
}
ch=str[x][y];
str[x][y]=str[x-1][y];
str[x-1][y]=ch;
x--;
}
if(Deal[i]=='B')
{
if(x==4)
{
ErrorFlag=1;
break;
}
ch=str[x][y];
str[x][y]=str[x+1][y];
str[x+1][y]=ch;
x++;
}
if(Deal[i]=='R')
{
if(y==4)
{
ErrorFlag=1;
break;
}
ch=str[x][y];
str[x][y]=str[x][y+1];
str[x][y+1]=ch;
y++;
}
if(Deal[i]=='L')
{
if(y==0)
{
ErrorFlag=1;
break;
}
ch=str[x][y];
str[x][y]=str[x][y-1];
str[x][y-1]=ch;
y--;
}
}
if(ErrorFlag) break;
if(Deal[strlen(Deal)-1]=='0') break;
}
if(Flag)
printf("\n");
printf("Puzzle #%d:\n",++Flag);
if(ErrorFlag)
{
printf("This puzzle has no final configuration.\n");
continue;
}
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
{
if(j)
printf(" ");
printf("%c",str[i][j]);
}
printf("\n");
}
}
}

  结果就WA了。

  AC代码:

 #include<stdio.h>
#include<string.h> char str[][];
char Deal[];
char ch;
int ErrorFlag;
int x,y;
int Flag;
int main()
{
Flag=;
while((gets(str[]))!=NULL&&strcmp(str[],"Z"))
{
ErrorFlag=;
for(int j=; j<strlen(str[]); j++)
if(str[][j]==' ')
{
x=;
y=j;
}
for(int i=; i<; i++)
{
gets(str[i]);
for(int j=; j<strlen(str[i]); j++)
if(str[i][j]==' ')
{
x=i;
y=j;
}
}
while(gets(Deal)!=NULL)
{
if(ErrorFlag==)
{
for(int i=; i<strlen(Deal); i++)
{
if(Deal[i]=='A')
{
if(x==)
{
ErrorFlag=;
break;
}
ch=str[x][y];
str[x][y]=str[x-][y];
str[x-][y]=ch;
x--;
}
if(Deal[i]=='B')
{
if(x==)
{
ErrorFlag=;
break;
}
ch=str[x][y];
str[x][y]=str[x+][y];
str[x+][y]=ch;
x++;
}
if(Deal[i]=='R')
{
if(y==)
{
ErrorFlag=;
break;
}
ch=str[x][y];
str[x][y]=str[x][y+];
str[x][y+]=ch;
y++;
}
if(Deal[i]=='L')
{
if(y==)
{
ErrorFlag=;
break;
}
ch=str[x][y];
str[x][y]=str[x][y-];
str[x][y-]=ch;
y--;
}
}
}
if(Deal[strlen(Deal)-]=='') break;
}
if(Flag)
printf("\n");
printf("Puzzle #%d:\n",++Flag);
if(ErrorFlag)
{
printf("This puzzle has no final configuration.\n");
continue;
}
for(int i=; i<; i++)
{
for(int j=; j<; j++)
{
if(j)
printf(" ");
printf("%c",str[i][j]);
}
printf("\n");
}
}
return ;
}

uva 227 Puzzle的更多相关文章

  1. UVA 227 Puzzle - 输入输出

    题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...

  2. UVA 227 Puzzle(基础字符串处理)

    题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...

  3. uva 227 Puzzle (UVA - 227)

    感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...

  4. Puzzle UVA - 227 PE代码求大佬指点

    ​ A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...

  5. UVA 277 Puzzle

    题意:输入5x5的字符串,输入操作,要求输出完成操作后的字符串. 注意:①输入的操作执行可能会越界,如果越界则按题目要求输出不能完成的语句. ②除了最后一次的输出外,其他输出均要在后面空一行. ③操作 ...

  6. UVA 227 周期串

    题意: 给一个字符串,寻找最短的循环节 如abcabcabcabc以3为周期,也按6和12为周期. 分析: 因为循环节肯定是相等的,所以枚举串长度的所有约数的循环节再判断是否相等即可. 我的方法是枚举 ...

  7. Uva227.Puzzle

    题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. UVA_Digit Puzzle UVA 12107

    If you hide some digits in an integer equation, you create a digit puzzle. The figure below shows tw ...

  9. uva live 12846 A Daisy Puzzle Game

    假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...

随机推荐

  1. AES CBC 128的实现

    原由 AES已经变成目前对称加密中最流行算法之一,AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 项目中需要使用AES对密码信息进行加密,由嵌入式设备使用C语言进行加 ...

  2. HBase笔记--安装及启动过程中的问题

    1.使用hbase shell的时候运行命令执行失败 例如:在shell下执行 status,失败. 可能的原因:节点之间的时间差距过大 解决方法调整两个节点的时间,使二者一致,这里用了个比较笨的方法 ...

  3. FJ省队集训DAY5 T1

    思路:考试的时候打了LCT,自以为能过,没想到只能过80.. 考完一想:lct的做法点数是100W,就算是nlogn也会T. 讲一下lct的做法把:首先如果一条边连接的两个点都在同一个联通块内,那么这 ...

  4. QT下资源使用和资源占用…(可以动态加载资源文件,这样不占内存)

    原文地址:关于QT下资源使用和资源占用内存过多的问题作者:技术成就梦想     最近研究了一下如何从外部动态调用图片的问题,从而研究了图片资源的使用方法.网上最常见的帖子是这个,感觉总结的还不错. h ...

  5. Cmake,链接一个外部(也可能是第三方,也可能是自己编译的)库

    相当于设置VS工程里面的: 然后,为了链接成可执行文件,链接器就会到指定的目录寻找相应的库了. 以下时Demo: cmake_minimum_required(VERSION 2.8) #set(CM ...

  6. Teach Yourself Scheme in Fixnum Days 13 Jump跳转

    Jumps One of the signal features of Scheme is its support for jumps or nonlocal control. Specificall ...

  7. Linux Shell逻辑运算符和表达式详解

    Shell 逻辑运算符涉及以下几种类型,只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑判断1.关于文件与目录的逻辑判断-f 常用.判断『文件』是否为普通文件,比如: if [ ...

  8. windows7环境下 硬盘安装ubuntu 12.04 server版

    之前一直用windows7环境下的虚拟机装的操作系统,但有时候在切换系统时老是死机,还是装一个硬盘版的ubuntu 12.04 server吧 先说一下本人的环境吧:windows 7 32位专业版+ ...

  9. 【转】Java.Math API 反正切算角度(四个象限情况要调整)

    原文网址:http://hunter090730.iteye.com/blog/485770 Math.PI 记录的圆周率Math.E 记录e的常量Math中还有一些类似的常量,都是一些工程数学常用量 ...

  10. NOI2013 树的计数

    题目:http://uoj.ac/problem/122 85%做法: 动态规划. 首先重编号,BFS序变成1...n,然后DFS序相应重编号. 记pos[i]为i号点在DFS中的位置,即pos[d[ ...