題目:
在一個?n?行?m?列的方格圖上有一些位置有地雷,另外一些位置為空。
請為每個空位置標一個整數,表示周圍八個相鄰的方格中有多少個地雷。
輸入描述
輸入的第一行包含兩個整數?n,m。
第?22行到第n+1?行每行包含?m?個整數,相鄰整數之間用一個空格分隔。如果對應的整數為?00,表示這一格沒有地雷。如果對應的整數為?11,表示這一格有地雷。
其中,1≤n,m≤1001≤n,m≤100?分鐘后還是在當天。
輸出描述
輸出?n?行,每行?m?個整數,相鄰整數之間用空格分隔。
對于沒有地雷的方格,輸出這格周圍的地雷數量。對于有地雷的方格,輸出?9。
解題思路
簡單的讀入計算輸出問題,暴力解即可。
1、把題目所需數組大小擴大兩行兩列通過memset初始化為0?保證下面res數組的邊界不會越界
2、把數組所有元素初始話為0
3、讀入題目數組,注意從第一行第一列開始,第一行第一列和最后一行最后一列是存?0?的對下面res的計算具有普適性
?用更大的存儲空間換取編碼的便捷
4、通過題目條件把已知num數組的周圍八個放個的地雷計數存入結果數組res
5、打印所需答案
代碼展示
#include<stdio.h>
#include<string.h>
int main()
{int n,m;scanf("%d%d",&n,&m);//把題目所需數組大小擴大兩行兩列通過memset初始化為0 保證下面res數組的邊界不會越界int num[n+2][m+2];int res[n+2][m+2];//把數組所有元素初始話為0memset(num,0,sizeof(num));//讀入題目數組,注意從第一行第一列開始,第一行第一列和最后一行最后一列是存 0 的對下面res的計算具有普適性//用更大的存儲空間換取編碼的便捷for(int i = 1;i<n+1;i++){for(int j = 1;j<m + 1;j++)scanf("%d",&num[i][j]);}//通過題目條件把已知num數組的周圍八個放個的地雷計數存入結果數組resfor(int i = 1;i<n+1;i++){for(int j = 1;j<m+1;j++){if(num[i][j] == 1){res[i][j] = 9;}else{//機械式操作res[i][j] = num[i-1][j-1] + num[i+1][j+1] + num[i][j-1] + num[i-1][j] + num[i+1][j] + num[i][j+1] + num[i+1][j-1] + num[i-1][j+1];}}}//打印所需答案for(int i = 1;i<n+1;i++){for(int j = 1;j<m + 1;j++){printf("%d ",res[i][j]);}printf("\n");}return 0;
}