感慨

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

题目大意

这个题目说的是有这么一个55的正方形里面有24个小正方形和一个空,然后这个游戏本来的意思是要通过移动把所有的正方形(每一个都印着一个字母)按照字母表的顺序排列好,但是这个题它放水了,没有让你去找怎么移动,而是仅仅给你一些指令去看看这些指令过后这个55的版是什么样子。。。emmm这不就很简单了,如果你这么想那就错了首先它的输入数据就会卡人。

分析卡人的地方

①输入数据是一连串连续的字符,而中间的空不用@,不用#,就用空格。空格啊,我去让我第一次输入的时候就没发现而被坑到了。空格意味着什么?意味着scanf和cin的扑街。

②然后它输入的指令是无限多的然后到0结束,嗯这个还比较容易但是居然指令中间还会有空行啊我去。。。可能指令就有多行,空行意味着什么?意味着getline也扑街了。

③好在我们还有c=getchar()的while循环,但是输出数据还有第一个常规坑就是字母最后不能有多余的空格,这个很好理解啊,一般的题也可能有。

④到了最后就是最坑的了,就是输出的最后一行不能有空行。关键输出结束看的是Z啊,我怎么知道什么时候输出Z?

解决最后输出Z的时候上一个结果不能有多余空行的问题

我直到今天上午才想明白这个东西,只要在Z的后面加一个if(num>0) 然后回车就行了,然后把下面的每个结果再空行的都删掉就ok了。

题目解法

实在没什么好说的这个题自己写一个swap然后按照意思swap就行了,注意要加一个判定如果出界那么就是无结果。我这个判定写在了一个函数里面

虽然debug上面的数据有输入指令是无效的然后结果是无结果的数据但是我经过测试发现不对指令进行测试也是AC的,说明指令完全可以不用考虑会不会出现无效的例如Q K O这种无效的字符。

我的代码

#include <iostream>
#include <cstring>
using namespace std;
int f;
char order[10000];
char orderplus[10000];
string map[5];
void swap(char &a,char &b)
{
char c;
c=a;
a=b;
b=c;
}
bool exc(int a,int b)
{
if(a<0||b<0||a>=5||b>=5)
{
f=1;
return true;
}
else
return false;
}
main()
{
int num=0;
while(1)
{
memset(order,0,sizeof(order));
f=0;
int x,y;
for(int i=0;i<5;i++)
{
getline(cin,map[i]);
if(map[0][0]=='Z')
return 0;
}
if(num>0)
cout<<endl;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(map[i][j]==' ')
{
x=i;y=j;
}
int p=0;
char now;
while((now=getchar())!='0')
order[p++]=now;
cin.get();
for(int i=0;i<p;i++)
{
if(order[i]=='A')
{
if(exc(x-1,y))
break;
swap(map[x-1][y],map[x][y]);
x=x-1;y=y;
}
else if(order[i]=='R')
{
if(exc(x,y+1))
break;
swap(map[x][y+1],map[x][y]);
x=x;y=y+1;
}
else if(order[i]=='B')
{
if(exc(x+1,y))
break;
swap(map[x+1][y],map[x][y]);
x=x+1;y=y;
}
else if(order[i]=='L')
{
if(exc(x,y-1))
break;
swap(map[x][y-1],map[x][y]);
x=x;y=y-1;
}
}
printf("Puzzle #%d:\n",++num);
if(f)
cout<<"This puzzle has no final configuration.\n";
else
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<map[i][j];
if(j<4)
cout<<" ";
}
cout<<endl;
}
}
}
}

uva 227 Puzzle (UVA - 227)的更多相关文章

  1. CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu?

    CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu? Description (原题来自刘汝佳<训练指南>Pa ...

  2. uva 227 Puzzle

     Puzzle  A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...

  3. UVA 227 Puzzle - 输入输出

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

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

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

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

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

  6. UVA_Digit Puzzle UVA 12107

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

  7. UVA 277 Puzzle

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

  8. uva 1587(Box UVA - 1587)

    题目大意是给定6个数对,每个数对代表一个面的长和宽,判断这6个面是否能构成一个长方体. 这种题一看很复杂,但是只要不想多了实际上这就是一个水题... 首先说明一下判断的思路: 1.长方体是有三个对面的 ...

  9. 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)

    *注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...

随机推荐

  1. JSP开发学习参考文章

    配置JDK和Tomcat环境变量 http://blog.csdn.net/lijiazhi1987/article/details/2742181 eclipse maven plugin 插件安装 ...

  2. Spark SQL Catalyst源代码分析之UDF

    /** Spark SQL源代码分析系列文章*/ 在SQL的世界里,除了官方提供的经常使用的处理函数之外.一般都会提供可扩展的对外自己定义函数接口,这已经成为一种事实的标准. 在前面Spark SQL ...

  3. imagebutton 设置点击和按压效果

    实现 点击 时 有按压效果 更换颜色 <ImageButton android:id="@+id/mediacontroller_Fullscreen_or_not" and ...

  4. JSTL判断list的size()大小,以及choose(相当于if else作用)

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ tag ...

  5. bzoj1061&&bzoj3256

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 单纯形... 先开始我不知道对偶,看着代码不知所措,并不能懂他们写的是什么... 单纯形的标准 ...

  6. E20171028-hm

    stick   n. 棍棒,棍枝; 枝条; 操纵杆; 球棍; stopwatch  n. (赛跑等记时用的) 秒表,跑表; agency   n. 代理; 机构; 力量; various   adj. ...

  7. [Swift通天遁地]八、媒体与动画-(9)快速实现复合、Label、延续、延时、重复、缓冲、弹性动画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. mahjong

    题目描述 “为什么, 你们的力量在哪里得到如此地......”“我们比 1 分钟前的我们还要进步, 虽然很微小, 但每转一圈就会前进一寸.这就是钻头啊!”“那才是通向毁灭的道路.为什么就没有意识到螺旋 ...

  9. Android 显示意图和隐式意图的区别

    意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么.        意图的作用:        1.激活组件   ...

  10. 关于vector.size()和string.length() 的返回类型 size_type

    今天写循环的时候碰到一个问题,发现:string.length()返回的类型是size_type.它是unsigned 类型.string::size_type它在不同的机器上,长度是可以不同的,并非 ...