题目描述
在一个 n行 m 列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数 n,m。
第 2 行到第 n+1 行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。
其中,1≤n,m≤100 分钟后还是在当天。
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。
输入输出样例
示例 1
输入
3 4
0 1 0 0
1 0 1 0
0 0 1 0
输出
2 9 2 1
9 4 9 2
1 3 9 2
运行限制
-
最大运行时间:1s
-
最大运行内存: 128M
分析:
二维数组用运。
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n,m;
int a[101][101];
int count;
scanf("%d%d",&n,&m);
for(int i = 1;i<=n;i++){//多留一行方便第一排第一列的周围求和
for(int j = 1;j<=m;j++){//多留一列,功能如上
scanf("%d",&a[i][j]);
// if(a[i][j] == 1)//标记地雷
// a[i][j] = 102;
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
count = 0;
if(a[i][j] == 1) {
printf("%5d ",9);
continue;
}
else if(a[i-1][j] == 1)count++;
if(a[i+1][j] == 1)count++;
if(a[i-1][j+1] == 1)count++;
if(a[i-1][j-1] == 1)count++;
if(a[i+1][j+1] == 1)count++;
if(a[i+1][j-1] == 1)count++;
if(a[i][j-1] == 1)count++;
if(a[i][j+1] == 1)count++;
printf("%5d ",count);
}
printf("\n");
}
return 0;
}