点击前往试题目录:https://blog.csdn.net/best335/article/details/99550556
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n,m,A[30][30],B[30][30],C[30][30];
cin>>n>>m,memset(B,0,sizeof(B)),memset(C,0,sizeof(C));
for(int i=0,xi=-1;i<n;++i,++xi){
for(int j=0,xj=-1;j<m;++j,++xj){
cin>>A[i][j];
if(j>0&&A[i][j]==A[i][xj])B[i][j]=B[i][xj]+1;//记录第i行到第j列最长的连续数
if(i>0&&A[i][j]==A[xi][j])C[i][j]=C[xi][j]+1;//记录第j列到第i行最长的连续数
}
}
for(int i=0;i<n;++i){//倒序将最长的连续数置0
for(int j=m-1;j>1;--j){
if(B[i][j]>1){
while(j>0&&B[i][j]!=0) A[i][j--]=0;
A[i][j]=0;
}
}
}
for(int i=0;i<m;++i)
for(int j=n-1;j>1;--j)//倒序将最长的连续数置0
if(C[j][i]>1){
while(j>0&&C[j][i]!=0) A[j--][i]=0;
A[j][i]=0;
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j)
cout<<(j==0?"":" ")<<A[i][j];
cout<<endl;
}
return 0;
}