uva 227 Puzzle
| 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 #1, Puzzle #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的更多相关文章
- UVA 227 Puzzle - 输入输出
题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...
- UVA 227 Puzzle(基础字符串处理)
题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
- Puzzle UVA - 227 PE代码求大佬指点
A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...
- UVA 277 Puzzle
题意:输入5x5的字符串,输入操作,要求输出完成操作后的字符串. 注意:①输入的操作执行可能会越界,如果越界则按题目要求输出不能完成的语句. ②除了最后一次的输出外,其他输出均要在后面空一行. ③操作 ...
- UVA 227 周期串
题意: 给一个字符串,寻找最短的循环节 如abcabcabcabc以3为周期,也按6和12为周期. 分析: 因为循环节肯定是相等的,所以枚举串长度的所有约数的循环节再判断是否相等即可. 我的方法是枚举 ...
- Uva227.Puzzle
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA_Digit Puzzle UVA 12107
If you hide some digits in an integer equation, you create a digit puzzle. The figure below shows tw ...
- uva live 12846 A Daisy Puzzle Game
假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...
随机推荐
- Java学习笔记--HashMap中使用object做key的问题【转】
在HashMap中,如果需要使用多个属性组合作为key,可以将这几个属性组合成一个对象作为key.但是存在的问题是,要做get时,往往没办法保存当初put操作时的key object的referenc ...
- While reading XXX pngcrush caught libpng error: N
错误一: While reading /XXX/XXX/XXX/img1.png pngcrush caught libpng error: Not a PNG filCould not fi ...
- Android Studio builde.gradle 配置说明
//声明是Android应用程序 apply plugin: 'com.android.application' android { //编译SDK版本 compileSdkVersion 21 bu ...
- DPI情况下处理
1. 字体不要跟着变大小,那就要使用setPixe,不要使用setPointSize 2. 图片可设置QPixmap::setDevicePixelRatio http://doc.qt.io/qt- ...
- JS打印、预览(IE,Chrome)
IE下: 调用IE内置打印组件完成web打印方案.IE调用ActiveX实现打印. 重点: 注意: 1.CSS对打印的控制: .Noprint{display:none;} .PageNext{pag ...
- OC 图片圆角实现
self.imageTouX.layer.masksToBounds=YES; self.imageTouX.layer.cornerRadius=/2.0f; //设置为图片宽度的一半出来为圆形 s ...
- Spring Ldap 的增删改查
package ldap.entity; /** * 本测试类person对象来自schema文件的core.schema文件 * objectClass为person,必填属性和可选属性也是根据该对 ...
- Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表
在接下来的教程中,我们将实现一个简单的JasperReports示例,展现其基本的开发.使用流程.文章很长,不过是以图片居多,文字并不多. 实例中使用最新的Jasper Studio5.2进行报表设计 ...
- 信息熵(Entropy)究竟是用来衡量什么的?
信息熵(Entropy)究竟是用来衡量什么的? ——与Philip ZHANG商榷 思明 Philip ZHANG先生在反驳彭小明的时候,提出一个观点,他说:“ 就语言文 字来说,总体效率不是用民族主 ...
- [Redux] Extracting Container Components -- Complete
Clean TodoApp Component, it doesn't need to receive any props from the top level component: const To ...