谜题 UVa227

题目链接:https://vjudge.net/problem/UVA-227

注意:
1、交换格子位置的时候注意不要乱用++i这样的操作,如swap(frame[ii][jj],frame[++ii][jj]);,应该分两行写。
2、使用getchar()函数的时候一定要注意吸收无效字符。
3、输出时注意两个结果之间要有空行(换行之后还要换行),但是最后一个结果后面无需空行。
4、输入测试样例的时候,如果是复制粘贴那么如果换行之前有空格的话,将不会有空格输入,如:ABC(空格)\n,这样只会输入ABC,导致程序结果出错。但是OJ中的数据是会加上此空格的,所以在程序中不用考虑这种情况,自己测试时注意手动输入空格即可。

AC代码:

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	char frame[5][5], t;
	int ii, jj, count = 0;
	bool flag;
	while(true)
	{
		flag = true;
		t = getchar();
		while (t == '\n')
			t = getchar();
		if (t == 'Z')
			return 0;
		for(int i = 0; i < 5 ; i++)
			for(int j = 0; j < 5; j++)
			{
				while (t == '\n')
					t = getchar();
				frame[i][j] = t;
				if (frame[i][j] == ' ')
				{
					ii = i;
					jj = j;
				}
				t = getchar();
			}
		flag = true;
		while(true)
		{
			while(t == '\n')
				t = getchar();
			if (t == '0')
				break;
			if(t == 'A')
			{
				if(ii-1 < 0)
				{
					flag = false;
					break;
				}
				swap(frame[ii][jj],frame[ii-1][jj]);
				ii--;
			}
			else if(t == 'B')
			{
				if(ii+1 > 4)
				{
					flag = false;
					break;
				}
				swap(frame[ii][jj],frame[ii+1][jj]);
				ii++;
			}
			else if(t == 'L')
			{
				if(jj-1 < 0)
				{
					flag = false;
					break;
				}
				swap(frame[ii][jj],frame[ii][jj-1]);
				jj--;
			}
			else if(t == 'R')
			{
				if(jj+1 > 4)
				{
					flag = false;
					break;
				}
				swap(frame[ii][jj],frame[ii][jj+1]);
				jj++;
			}
			t = getchar();
		}
		while(t != '0')
			t = getchar();
		if (count != 0)
			printf("\n");
		printf("Puzzle #%d:\n",++count);
		if(flag == true)
			for(int i = 0; i < 5; i++)
			{
				printf("%c", frame[i][0]);
				for(int j = 1; j < 5; j++)
				{
					printf(" %c", frame[i][j]);
				}
				printf("\n");
			}
		else
			printf("This puzzle has no final configuration.\n");
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值