第一次提交只有20分,利用测试例子发现第四行的第三个也会变成0
查看代码,发现原因是
if(p[i][j-1].flag==1) p[i][j].flag=1;
本来是想简化循环内的操作,但是由于考虑不周,导致结果错误。
修改之后,提交得100分的c语言程序如下:
#include<stdio.h>
struct point{
int color;
int flag;
}p[31][31];
int m,n,i,k,j;
int main(){
scanf("%d%d",&n,&m);
i=1;
while(i<=n){
j=1;
while(j<=m){
scanf("%d",&p[i][j].color);
p[i][j].flag=0;
if(j>=3){
if(p[i][j].color==p[i][j-1].color){
if(p[i][j-2].color==p[i][j].color){
p[i][j-2].flag=1;
p[i][j-1].flag=1;
p[i][j].flag=1;
}
}
}
if(i>=3){
if(p[i][j].color==p[i-1][j].color){
if(p[i-2][j].color==p[i-1][j].color){
p[i][j].flag=1;
for(k=1;k<i;k++){
if(p[i-k][j].color==p[i][j].color)
p[i-k][j].flag=1;
else break;
}
}
}
}j++;
}i++;
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(p[i][j].flag==1) p[i][j].color=0;
printf("%d ",p[i][j].color);
}
printf("\n");
}
return 0;
}