水平方向遍历一次,竖直方向遍历一次,将需要删除的位置标志入一个数组,最后比较输出即可。
#include<cstdio> #include<iostream> using namespace std; int main() { int n,m,a[35][35],del[35][35] = {0}; cin >> n >> m; for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) cin >> a[i][j]; } for(int i = 1;i <= n;i++) { int num = 1; for(int j = 1;j <= m;j++) { if(j != m && a[i][j] == a[i][j+1]) num++; else { if(num >= 3) { while(num--) del[i][j-num] = 1; } num = 1; } } } for(int j = 1;j <= m;j++) { int num = 1; for(int i = 1;i <= n;i++) { if(i != n && a[i][j] == a[i+1][j]) num++; else { if(num >= 3) { while(num--) del[i-num][j] = 1; } num = 1; } } } for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { if(del[i][j]) cout << "0 "; else cout << a[i][j] << ' '; } cout << endl; } return 0; }