UVa 227 Puzzles
2016-02-05 01:58
281 查看
3-5
本题调试了许久,虽然最终仍然是WA, 但是一直未能查出纰漏之处,先将代码贴上,如日后查出bug,再前来编辑:
(注释掉的是为了审查输出格式而输出到一个data.out文件)
#include <stdio.h>
#include <string.h>
int main(void)
{
// FILE *fout;
// fout = fopen("data.out", "wb");
int i, j, m, c, x, y, flag = 1, count = 0;
char store[5][10], temp[10];
fgets(temp, 8, stdin);//得到第一行输入,来判断是否是Z\n,用来结束程序
while (temp[1] != '\n')
{
if (count > 0)
// fprintf(fout, "\r\n");//如果不是第一组那么在头行输出一个换行符
printf("\n");
for (j = 0; j < 8; j++)
store[0][j] = temp[j];//将temp数组中的元素给到二维数组的第一行中
for (i = 1; i < 5; i++)
fgets(store[i], 8, stdin);//得到所有的输入
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
if (store[i][j] == ' ') {
x = i;
y = j;
}
while ((c = getchar()) != '0')//用来换的移动指令,用模拟的方式改变元素位置
{
if (c == '\n')
continue;
else
switch (c) {
case 'A':
if (x > 0)
{
store[x][y] = store[x-1][y];
store[x-1][y] = ' ';
x--;
}
else
{
flag = 0;
break;
}
break;
case 'B':
if (x < 4)
{
store[x][y] = store[x+1][y];
store[x+1][y] = ' ';
x++;
}
else
{
flag = 0;
break;
}
break;
case 'L':
if (y > 0)
{
store[x][y] = store[x][y-1];
store[x][y-1] = ' ';
y--;
}
else
{
flag = 0;
break;
}
break;
case 'R':
if (y < 4)
{
store[x][y] = store[x][y+1];
store[x][y+1] = ' ';
y++;
}
else
{
flag = 0;
break;
}
break;
default:
flag = 0;
break;
}
if (flag == 0)
break;
}
while ((c = getchar() != '\n'));
count++;
printf("Puzzle #%d:\n", count);
// fprintf(fout, "Puzzle #%d:\r\n", count);
if (flag == 1)
for (i = 0; i < 5; i++)
for (j = 0, m = 0; j < 5; j++, m++)//m的作用是用来输出空格和换行符的
if (m < 4)
printf("%c ", store[i][j]);
// fprintf(fout, "%c ", store[i][j]);
else
printf("%c\n", store[i][j]);
// fprintf(fout, "%c\r\n", store[i][j]);
else
printf("This puzzle has no final configuration.\n");
// fprintf(fout, "This puzzle has no final configuration.\r\n");
fgets(temp, 8, stdin);
flag = 1;
}
// fclose(fout);
return 0;
}
如有人可以看出bug所在,欢迎前来探讨
本题调试了许久,虽然最终仍然是WA, 但是一直未能查出纰漏之处,先将代码贴上,如日后查出bug,再前来编辑:
(注释掉的是为了审查输出格式而输出到一个data.out文件)
#include <stdio.h>
#include <string.h>
int main(void)
{
// FILE *fout;
// fout = fopen("data.out", "wb");
int i, j, m, c, x, y, flag = 1, count = 0;
char store[5][10], temp[10];
fgets(temp, 8, stdin);//得到第一行输入,来判断是否是Z\n,用来结束程序
while (temp[1] != '\n')
{
if (count > 0)
// fprintf(fout, "\r\n");//如果不是第一组那么在头行输出一个换行符
printf("\n");
for (j = 0; j < 8; j++)
store[0][j] = temp[j];//将temp数组中的元素给到二维数组的第一行中
for (i = 1; i < 5; i++)
fgets(store[i], 8, stdin);//得到所有的输入
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
if (store[i][j] == ' ') {
x = i;
y = j;
}
while ((c = getchar()) != '0')//用来换的移动指令,用模拟的方式改变元素位置
{
if (c == '\n')
continue;
else
switch (c) {
case 'A':
if (x > 0)
{
store[x][y] = store[x-1][y];
store[x-1][y] = ' ';
x--;
}
else
{
flag = 0;
break;
}
break;
case 'B':
if (x < 4)
{
store[x][y] = store[x+1][y];
store[x+1][y] = ' ';
x++;
}
else
{
flag = 0;
break;
}
break;
case 'L':
if (y > 0)
{
store[x][y] = store[x][y-1];
store[x][y-1] = ' ';
y--;
}
else
{
flag = 0;
break;
}
break;
case 'R':
if (y < 4)
{
store[x][y] = store[x][y+1];
store[x][y+1] = ' ';
y++;
}
else
{
flag = 0;
break;
}
break;
default:
flag = 0;
break;
}
if (flag == 0)
break;
}
while ((c = getchar() != '\n'));
count++;
printf("Puzzle #%d:\n", count);
// fprintf(fout, "Puzzle #%d:\r\n", count);
if (flag == 1)
for (i = 0; i < 5; i++)
for (j = 0, m = 0; j < 5; j++, m++)//m的作用是用来输出空格和换行符的
if (m < 4)
printf("%c ", store[i][j]);
// fprintf(fout, "%c ", store[i][j]);
else
printf("%c\n", store[i][j]);
// fprintf(fout, "%c\r\n", store[i][j]);
else
printf("This puzzle has no final configuration.\n");
// fprintf(fout, "This puzzle has no final configuration.\r\n");
fgets(temp, 8, stdin);
flag = 1;
}
// fclose(fout);
return 0;
}
如有人可以看出bug所在,欢迎前来探讨
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法