消除类游戏
错误出现
错误原因:for循环没考虑第一行有三个连续的情况。如输入
3 3
1 1 1
2 1 2
1 1 1
输出
1 0 1
2 0 2
0 0 0
#include <bits/stdc++.h>
#define N 31
using namespace std;
int a[N][N] = {0};
int b[N][N] = {0};
int main()
{
//cout << "Hello world!" << endl;
int n,m;
cin>>n>>m;
for(int i = 0; i < n;i++)
for(int k = 0;k < m;k++){
cin>>a[i][k];
b[i][k] = a[i][k];
}
for(int i = 1; i < n;i++)
for(int k = 1;k < m;k++){
if(a[i][k]==a[i][k+1]&&a[i][k-1]==a[i][k])
b[i][k] = b[i][k+1] = b[i][k-1] = 0;
if(a[i+1][k]==a[i][k]&&a[i-1][k]==a[i][k])
b[i+1][k] = b[i][k] = b[i-1][k]= 0;
}
for(int i = 0; i < n;i++){
for(int k = 0;k < m;k++)
cout<<b[i][k]<<" ";
cout<<endl;
}
return 0;
}
正确
对数组的0行赋值0使得循环i-1不越界
#include <bits/stdc++.h>
#define N 31
using namespace std;
int a[N][N] = {0};
int b[N][N] = {0};
int main()
{
//cout << "Hello world!" << endl;
int n,m;
cin>>n>>m;
for(int i = 1; i < n+1;i++)
for(int k = 1;k < m+1;k++){
cin>>a[i][k];
b[i][k] = a[i][k];
}
for(int i = 1; i < n+1;i++)
for(int k = 1;k < m+1;k++){
if(a[i][k]==a[i][k+1]&&a[i][k-1]==a[i][k])
b[i][k] = b[i][k+1] = b[i][k-1] = 0;
if(a[i+1][k]==a[i][k]&&a[i-1][k]==a[i][k])
b[i+1][k] = b[i][k] = b[i-1][k]= 0;
}
for(int i = 1; i < n+1;i++){
for(int k = 1;k < m+1;k++)
cout<<b[i][k]<<" ";
cout<<endl;
}
return 0;
}