Puzzle UVA - 227 PE代码求大佬指点
A children’s puzzle that was popular 30 years ago consisted of a 5×5 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:
The square above the empty position moves.
The square to the right of the empty position moves.
The square to the right of the empty position moves.
The square below the empty position moves.
The square below the empty position moves.
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.
HINT
这道题真是把我这个菜鸡给整吐了。我不知道如果空格再最后到底会不会录入到数组中,就加上一个判断数组长度,一开始使用gets()结果不可以使用然后自己写了一个类似的对于这个题来说够用的函数来代替,还是不可以。最后看到VJ下面评论说最后一个没有空行,就加上一个判断(设置一个flag1为0,如果是第一次输入就将flag1设置为1,否则在输入之前输出换行),结果还是不行。。。。求大佬指点 我还是个孩子啊,呜呜~
Presentation error
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swaps(char* a, char* b)
{
char t = *a;
*a = *b;
*b = t;
}
void ingets(char* s)
{
int i = 0;
char temp;
while (1)
{
temp = getchar();
while(!i&&temp=='\n')temp = getchar();
if (temp != '\n')
s[i++] = temp;
else break;
}
}
int main()
{
char arr[5][5];
int h, k;
int sum = 0,flag=0;
int flag1 = 0;
while (1)
{
if (!flag1)flag1++;
else printf("\n");
flag = 0;
for (int i = 0;i < 5;i++)
{
memset(arr[i], '\0', 5);
ingets(arr[i]);
while (strlen(arr[i])==0)
ingets(arr[i]);
if (i == 0 && arr[i][0] == 'Z')
{
exit(0);
flag = 1;
break;
}
if (strlen(arr[i]) == 4)
arr[i][4] = ' ';
for (int j = 0;j < 5;j++)
{
if (arr[i][j] == ' ')
{
h = i;
k = j;
}
}
}
if (flag==1)break;
char move;
while (1)
{
move = getchar();
if (move == '0')break;
if (move == 'A')
{
if (h == 0)
{
flag = 1;
while(move!='0')
move = getchar();
break;
}
swaps(&arr[h][k], &arr[h-1][k]);
h--;
}
else if (move == 'B')
{
if (h == 4)
{
flag = 1;
while (move != '0')
move = getchar();
break;
}
swaps(&arr[h][k], &arr[h+1][k]);
h++;
}
else if (move == 'L')
{
if (k == 0)
{
flag = 1;
while (move != '0')
move = getchar();
break;
}
swaps(&arr[h][k], &arr[h][k-1]);
k--;
}
else if (move == 'R')
{
if (k == 4)
{
flag = 1;
while (move != '0')
move = getchar();
break;
}
swaps(&arr[h][k], &arr[h][k+1]);
k++;
}
}
if (flag)
printf("Puzzle #%d:\nThis puzzle has no final configuration.", ++sum);
else
{
printf("Puzzle #%d:\n", ++sum);
for (int i = 0;i < 5;i++)
printf("%c %c %c %c %c\n", arr[i][0], arr[i][1], arr[i][2], arr[i][3], arr[i][4]);
}
}
}
Puzzle UVA - 227 PE代码求大佬指点的更多相关文章
- Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)
级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
- 记一次dotnet拆分包,并希望得大佬指点
记一次dotnet拆分包,并希望得大佬指点 之前做了一个用于excel导入导出的包, 定义了一些接口, 然后基于 NPOI EPPlus MiniExcel 做了三种实现 接口大概长下面这样(现在可以 ...
- JavaScript忍者秘籍——运行时代码求值
1. 代码求值机制 JavaScript中,有很多不同的代码求值机制. ● eval()函数 ● 函数构造器 ● 定时器 ● <script>元素 - 用eval()方法进行求值 作为定义 ...
- 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
Vector两行代码求逆序对 背景:济南集训Day7上午T2,出了一道逆序对的裸题,SB的我没看出是逆序对来,于是现场推了一个很刁钻的求逆序对的方法 首先我们想一下冒泡排序的过程,我们不难发现,对于每 ...
- java代码求阶乘n!
面试过程中总是遇到要求写一段Java代码求阶乘.下面就是就是两种求阶乘 n! 的方法: 1.使用递归求解n! public int doFactorial(int n){ if(n<0){ re ...
- UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494
白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ...
- centos7中文显示为小方块~~啊啊啊 求大佬们解答
这个问题困扰我很久了,刚好前几天注册了博客园,就想问问大佬们是怎么解决中文显示小方块的? 我试了很多办法,包括但不限于修改i18n配置文件,locale.conf,添加中文字体库等等等... 但都没有 ...
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
先看看这个题目:某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C代码求出这两个单身整数. 要求: 时间复杂度o(n), 空间复杂度o(1). 我们先用最傻瓜的方式来做吧: #inc ...
随机推荐
- 在 TKE 中使用 Velero 迁移复制集群资源
概述 Velero(以前称为Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 群集资源和持久卷,可以在 TKE 集群或自建 Kubernetes ...
- c语言:分治算法之大数相乘
我们把整数A由规模n分为n1和n2,把整数B由规模m分为m1和m2,如下图: 则A分为n1位的A1和n2位的A1,B分为m1位的B1和m2位的B2,如下式所示: 以此类推,我们可以把A1.A2.B1. ...
- DRF简介/接口概念
目录 一.drf框架简介 1. drf安装 2. drf的优势 二.接口 1. 接口的概念 2. 接口文档 3. 接口规范(restful) 3.1 url链接规范 3.2 请求方式规范 3.3 响应 ...
- 微信小程序滚动条设置
隐藏滚动条 ::-webkit-scrollbar { width: 0rpx; height: 0rpx; background-color: transparent; } 其实设置为宽高为 0 或 ...
- QuickBase64 - Android 下拉通知栏快捷base64加解密工具
Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...
- Gym100923H Por Costel and the Match
题目链接:http://codeforces.com/gym/100923/problem/H 分析:并查集,用enemy储存x的敌人,用weight储存权重决定根节点 需用scanf和puts输入输 ...
- windows 下使用vargant 搭建虚拟机服务
使用vagrant 下载 vagrant[https://www.vagrantup.com/downloads.html] 下载管理工具VirtualBox[https://www.virtualb ...
- rest framework Request
要求 如果你正在做基于REST的Web服务的东西......你应该忽略request.POST. -马尔科姆Tredinnick,Django开发组 REST框架的Request类继承了标准HttpR ...
- RabbitMQ镜像队列集群搭建、与SpringBoot整合
镜像模式 集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的,并且实现集群比较的简单. Mirror镜像队列,目的是为了保证 RabbitMQ 数据的高可靠 ...
- 搭建zabbix服务1
环境准备: 静态ip 主机名 各自配置好主机名 # hostnamectl set-hostname --static zabbixserver.cluster.com 三台都互相绑定IP与主机名 # ...