201512-2 消除类游戏
题目
思路
开一个标记数组,横竖点完之后再根据标记进行输出。按行一边遍历一边修改会影响按列遍历时的结果。
AC代码如下
#include<cstdio>
int main(){
int n,m,a[32][32]={0};
scanf("%d%d",&n,&m);
int now,k;
bool f[32][32]={false};
for(int i=0;i<n;i++){//输入,同时按行遍历作标记
now=0,k=1;
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
if(a[i][j]==now){
k++;
if(k==3) f[i][j]=f[i][j-1]=f[i][j-2]=true;
else if(k>3) f[i][j]=true;
} else {
now=a[i][j];
k=1;
}
}
}
for(int j=0;j<m;j++){//按列遍历,作标记
now=0,k=1;
for(int i=0;i<n;i++){
if(a[i][j]==now){
k++;
if(k==3) f[i][j]=f[i-1][j]=f[i-2][j]=true;
else if(k>3) f[i][j]=true;
} else {
now=a[i][j];
k=1;
}
}
}
for(int i=0;i<n;i++){//输出
for(int j=0;j<m;j++){
if(f[i][j]) printf("0");
else printf("%d",a[i][j]);
if(j<m-1) printf(" ");
else printf("\n");
}
}
return 0;
}