#include <iostream>
using namespace std;
int main()
{
int m, n;
cin >> n >> m;
int arr[n][m],result[n][m];
for(int i = 0 ; i < n; i ++)
for(int j = 0 ; j < m ; j ++){
cin >> arr[i][j];
result[i][j] = arr [i][j];
}
/*
原: 固定思维,非要考虑相邻的>4个元素相等的情况
更新:只要考虑相邻的3个元素相等的情况
*/
//***********************************************
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j++){
// if(j + 2 < m) //判断随后是否有2个数 横行判断
if(arr[i][j] == arr[i][j + 1] && arr[i][j + 1] == arr[i][j + 2]){
if(j + 2 < m) {
result[i][j] = 0;
result[i][j + 1] = 0;
result[i][j + 2] = 0;
}
}
if(i + 2 < n)//判断随后是否有2个数 竖行判断
if(arr[i][j] == arr[i + 1][j] && arr[i + 1][j] == arr[i + 2][j]){
result[i][j] = 0;
result[i + 1][j] = 0;
result[i + 2][j] = 0;
}
}
//**********************************************
for(int i = 0 ; i < n; i ++){
for(int j = 0 ; j < m ; j ++)
cout << result[i][j] << " ";
cout << endl;
}
}
using namespace std;
int main()
{
int m, n;
cin >> n >> m;
int arr[n][m],result[n][m];
for(int i = 0 ; i < n; i ++)
for(int j = 0 ; j < m ; j ++){
cin >> arr[i][j];
result[i][j] = arr [i][j];
}
/*
原: 固定思维,非要考虑相邻的>4个元素相等的情况
更新:只要考虑相邻的3个元素相等的情况
*/
//***********************************************
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j++){
// if(j + 2 < m) //判断随后是否有2个数 横行判断
if(arr[i][j] == arr[i][j + 1] && arr[i][j + 1] == arr[i][j + 2]){
if(j + 2 < m) {
result[i][j] = 0;
result[i][j + 1] = 0;
result[i][j + 2] = 0;
}
}
if(i + 2 < n)//判断随后是否有2个数 竖行判断
if(arr[i][j] == arr[i + 1][j] && arr[i + 1][j] == arr[i + 2][j]){
result[i][j] = 0;
result[i + 1][j] = 0;
result[i + 2][j] = 0;
}
}
//**********************************************
for(int i = 0 ; i < n; i ++){
for(int j = 0 ; j < m ; j ++)
cout << result[i][j] << " ";
cout << endl;
}
}
这是一个C++实现的消除类游戏算法。程序通过读取二维数组输入,检查并消除连续3个相同元素,更新结果数组并输出。算法优化了判断条件,仅考虑相邻3个元素相等的情况。
262

被折叠的 条评论
为什么被折叠?



