原题链接: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;
}