题目描述
在一个n行m列的方格图上有一些位置有地雷,另外一些位置为空。请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数n,m。第2行到第n+1行,每行包含m个整数,相邻整数之间用一个空格分隔,如果对应的整数为0,表示这一格没有地雷。如果对应的整数为1,表示这一格有地雷。其中,1≤n,m≤100分钟后还是在当天。
输出描述
输出n行,每行m个整数,相邻整数之间用空格分隔。对于没有地雷的方格,输出这格周围的地雷数量,对于有地雷的方格,输出9.
#include<iostream>
using namespace std;
int n,m;
int d[100][100]={0};
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>d[i][j];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int count=0;
if(d[i][j]==1)
{
cout<<9<<" ";
}
//记录该格子八个方向上有地雷个数
else{
for(int x=i-1;x<=i+1;x++){
for(int y=j-1;y<=j+1;y++)
if(x>=0&&y>=0&&x<n&&y<m&&d[x][y]==1){
count++;
}
}
cout<<count<<" ";
}
}
cout<<endl;
}
}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int n,m,i,j,count;
scanf("%d %d",&n,&m);
int arr[n+2][m+2];//第一行和第n+1行全为0,第一列和第m+1列全为0;
int ans[n+2][m+2];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&arr[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if(arr[i][j]==1) ans[i][j] = 9;
else{
count = 0;
if(arr[i+1][j] == 1)count++;//上
if(arr[i-1][j] == 1)count++;//下
if(arr[i][j-1] == 1)count++;//左
if(arr[i][j+1] == 1)count++;//右
if(arr[i+1][j-1] == 1)count++;//左上
if(arr[i-1][j-1] == 1)count++;//左下
if(arr[i+1][j+1] == 1)count++;//右上
if(arr[i-1][j+1] == 1)count++;//右下
ans[i][j] = count;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
printf("%d ",ans[i][j]);
printf("\n");
}
return 0;
}