第四题:扫雷
题目描述
在一个 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;
}