思路:
模拟题目过程,进行扫描。
代码:
#include <stdio.h>
#include <string.h>
int n,m;
int ele[35][35];
int flag[35][35];
void check1(int &x,int &y){//检验所在行
if(y-1<0 || y+1>=m) return;
if(ele[x][y]==ele[x][y-1] && ele[x][y]==ele[x][y+1]){
flag[x][y-1]=1;flag[x][y]=1;flag[x][y+1]=1;
//printf("drop_1 the ele[%d][%d]\n",x,y);
return;
}
}
void check2(int &x,int &y){
if(x-1<0 || x+1>=n) return;
if(ele[x][y]==ele[x-1][y] && ele[x][y]==ele[x+1][y]){
flag[x-1][y]=1;flag[x][y]=1;flag[x+1][y]=1;
//printf("drop_2 the ele[%d][%d]\n",x,y);
return;
}
}
int main(){
scanf("%d%d",&n,&m);
memset(flag,0,sizeof(flag));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&ele[i][j]);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
check1(i,j);
check2(i,j);
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(j==0){
if(flag[i][j]==1) printf("0");
else printf("%d",ele[i][j]);
}
else{
if(flag[i][j]==1) printf(" 0");
else printf(" %d",ele[i][j]);
}
}
printf("\n");
}
return 0;
}