习题3-5 谜题(Puzzle,ACM/ICPC Word Finals 1993,UVa227)

原题链接:https://vjudge.net/problem/UVA-227
分类:字符串、数组
备注:试错
思路:按着题目意思实现操作就可以了。
可是事实是无情的WA,百思不得其解…这题的难处就是想的到的错误全避免也还是可能WA!是的,我看过别人说的错误点,我认为自己是全避免了,但还是没用。 T^T
不得不直接看别人的代码,把自己的慢慢改终于AC。除了注意数组边界问题应该还有很难发现的毛病,但是我想不出了,题目检测方式真的没问题吗…?怀疑谜题简直是题目本身…评论中说题目的输入数据有问题,但是我这代码好像没有体现出输入数据的问题。
AC代码如下:

#include<stdio.h>
char a[10][10], ch;
int	kase, flag, x, y;
void find()
{
	for (x = 1; x <= 5; x++)
		for (y = 1; y <= 5; y++)
			if (a[x][y] == ' ')return;
}
int main(void)
{
	while (1)
	{
		flag = 0;
		for (int i = 1; i <= 5; i++)
		{
			for (int j = 1; j <= 5; j++)
			{
				scanf("%c", &a[i][j]);
				if (a[1][1] == 'Z') return 0;
			}
			getchar();
		}
		find();
		while ((ch = getchar()) != '0')
		{
			if (ch == ' ' || ch == '\n')continue;
			if (ch == 'A' && x - 1 > 0) { a[x][y] = a[x - 1][y]; x--; }
			else if (ch == 'B' && x + 1 <= 5) { a[x][y] = a[x + 1][y]; x++; }
			else if (ch == 'L' && y - 1 > 0) { a[x][y] = a[x][y - 1]; y--; }
			else if (ch == 'R' && y + 1 <= 5) { a[x][y] = a[x][y + 1]; y++; }
			else flag = 1;
		}
		a[x][y] = ' ';
		getchar();
		if (kase)printf("\n");
		printf("Puzzle #%d:\n", ++kase);
		if (flag)printf("This puzzle has no final configuration.\n");
		else for (int i = 1; i <= 5; i++)
				for (int j = 1; j <= 5; j++)
					printf("%c%c", a[i][j], j == 5 ? '\n' : ' ');
	}
	return 0;
}
发布了22 篇原创文章 · 获赞 23 · 访问量 510

猜你喜欢

转载自blog.csdn.net/TK_wang_/article/details/104364773