给定一个 m 行 n 列的二维数组,请找出这个二维数组中唯一的一个值为0的元素,并将其直接相邻的八个方向上的元素值全部变成0,然后再求这个矩阵中所有数的和。 直接相邻的八个方向包括:上、下、左、右、左上、左下、右上和右下
如下:
#include <stdio.h>
int main()
{
int m,n,i,j;
int a[100][100];
int mx,my; //0所在的行和列
int sum =0;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]==0)
{
mx = i;
my = j;
}
}
}
//将临近值置0
if(mx-1>=0) //上
a[mx-1][my]=0;
if(mx-1>=0 && my-1>=0) //左上
a[mx-1][my-1]=0;
if(mx-1>=0 && my+1<n) //右上
a[mx-1][my+1] = 0;
if(my+1<n) //右
a[mx][my+1]=0;
if(mx+1<m && my+1<n)//右下
a[mx+1][my+1]=0;
if(mx+1<m)
a[mx+1][my]=0; //下
if(mx+1<m && my-1>=0)//左下
a[mx+1][my-1]=0;
if(my-1>=0)
a[mx][my-1]=0; //左
for(i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
sum +=a[i][j];
}
}
printf("%d",sum);
return 0;
}