题目:
思路
使用二维数组a记录原始棋盘,用二维数组b判断是否消去。
遍历数组,对于每一个棋子,分别向左右,上下进行延伸,若相同棋子数大于三,则将相同棋子所在的b数组内的值+1。
最后根据每个棋子在b中的值判断输出即可,如果大于0则直接输出0等于0则输出原值。
代码
#include <iostream>
#include <string.h>
using namespace std;
const int N = 35;
int n, m;
int a[N][N], b[N][N];
int main()
{
memset(b, 0, sizeof(b));
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf("%d", &a[i][j]);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (j == 0)
{
if (a[i][j] == a[i][j + 1] && a[i][j + 1] == a[i][j + 2])
b[i][j]++, b[i][j + 1]++, b[i][j + 2]++;
}
if (j == m - 1)
{
if (a[i][j] == a[i][j - 1] && a[i][j - 1] == a[i][j - 2])
b[i][j]++, b[i][j - 1]++, b[i][j - 2]++;
}
if (j > 0 && j < m - 1)
{
if (a[i][j] == a[i][j + 1] && a[i][j] == a[i][j - 1])
b[i][j]++, b[i][j + 1]++, b[i][j - 1]++;
}
if (i == 0)
{
if (a[i][j] == a[i + 1][j] && a[i + 2][j] == a[i + 1][j])
b[i][j]++, b[i + 1][j]++, b[i + 2][j]++;
}
if (i == n - 1)
{
if (a[i][j] == a[i-1][j] && a[i-1][j] == a[i-2][j])
b[i][j]++, b[i - 1][j]++, b[i - 2][j]++;
}
if (i > 0 && i < n - 1)
{
if (a[i][j] == a[i + 1][j] && a[i][j] == a[i - 1][j])
b[i][j]++, b[i + 1][j]++, b[i - 1][j]++;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (b[i][j] > 0)
a[i][j] = 0;
printf("%d ", a[i][j]);
}
cout<<endl;
}
return 0;
}