一、题目:The Game;
二、题目意思:http://acm.pku.edu.cn/JudgeOnline/problem?id=1970
三、错误思想:
1、从八个方向判断;
2、没有考虑到结果为0的情况(没有读懂题意啊!);
3、数组越界;
4、没有考虑到棋子>=6的情况;
五、正确的解法:
通过自己的研究与网上查找的相关资料,终于搞定:
·#include "stdio.h"
·#include "string.h"
·
·#define max 19
·int data[25][25];
·
·int main()
·{
·
· int n;
· int i, j;
· int k;
· int key;
· int flag;
·
· scanf("%d",&n);
· while (n--)
· {
· //输入棋盘的相关数字
· for (i = 0; i < max; i++)
· {
· for (j = 0; j < max; j++)
· {
· scanf("%d",&data[j]);
· }
· }
·
· flag = 0; //标志,为1表示知道结果
· //从左向右,上到下枚举
· //向正下方、左下方、右下方、正右方进行测试结果
· for (j = 0; j < max; j++)
· {
· for (i = 0; i < max; i++)
· {
· if (data[j] != 0)
· {
· //正下方
· if (j + 4 < max)
· {
· //测试是否在正下方有5个相同的棋子
· for (k = 1, key = 0; k < 5; k++)
· {
· //没有,则由key记录
· if (data[j + k] != data[j])
· {
· key = 1;
· break;
· }
· }
· //当发现有5个相同的棋子时,向上1位与向下5位的情况
· if (!key && (j + 5 >= max || data[j + 5] != data[j])
· && (j - 1 < 0 || data[j - 1] != data[j]))
· {
· //一切都符合要求,则打印,并由flag记录
· printf("%d/n%d %d/n", data[j], i + 1, j + 1);
· flag = 1;
· break;
· }
· }
· //右下方
· if (j + 4 < max && i + 4 < max)
· {
· for (k = 1, key = 0; k < 5; k++)
· {
· if (data[j + k] != data[j])
· {
· key = 1;
· break;
· }
· }
· if (!key && (j + 5 >= max || i + 5 >= max || data[j + 5] != data[j])
· && (i - 1 < 0 || j - 1 < 0 || data[j - 1] != data[j]))
· {
· printf("%d/n%d %d/n", data[j], i + 1, j + 1);
· flag = 1;
· break;
· }
· }
· //正右方
· if (i + 4 < max)
· {
· for (k = 1, key = 0; k < 5; k++)
· {
· if (data[j] != data[j])
· {
· key = 1;
· break;
· }
· }
· if (!key && (i + 5 >= max || data[j] != data[j])
· && (i - 1 < 0 && data[j] != data[j]))
· {
· printf("%d/n%d %d/n", data[j], i + 1, j + 1);
· flag = 1;
· break;
· }
· }
· //左下方
· if (j + 4 < max && i - 4 >= 0)
· {
· for (k = 1, key = 0; k < 5; k++)
· {
· if (data[j + k] != data[j])
· {
· key = 1;
· break;
· }
· }
· if (!key && (j + 5 >= max || i - 5 < 0 || data[j + 5] != data[j])
· && (i + 1 >= max || j - 1 < 0 || data[j - 1] != data[j]))
· {
· printf("%d/n%d %d/n", data[j], i + 1, j + 1);
· flag = 1;
· break;
· }
· }
· }
· }
· if (flag)
· {
· break;
· }
· }
· if (j == max)
· {
· printf("0/n");
· }
· }
·
· return 0;
·}
六、Memory:176k Time: 0Ms
七、总结自己容易犯的错误:
1、没有读懂题意;
2、数组越界问题;(以后一定要注意c语言的数组下标是从0开始的)
pku 1970 搜索 The Game 解题报告
最新推荐文章于 2021-08-26 15:15:45 发布