第四题:扫雷

时间:2024-04-04 14:42:22

题目描述

在一个 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;
}