NC22232. 扫雷
描述
现在给出n行m列的雷区中的地雷分布,请计算出每个非地雷格周围的地雷格数。
输入描述
第一行输入两个整数n,m ,分别表示雷区的行数和列数。
接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。
1<=n,m<=100
输出描述
输出包含n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符
示例1
输入:
3 3 *?? ??? ?*?
输出:
*10 221 1*1
Python3 解法, 执行用时: 48ms, 内存消耗: 4668K, 提交时间: 2023-02-22 09:07:17
n, m = map(int, input().split()) mine_map = [list(input()) for _ in range(n)] for i in range(n): for j in range(m): if mine_map[i][j] == '?': count = 0 for x in range(max(i-1, 0), min(i+2, n)): for y in range(max(j-1, 0), min(j+2, m)): if mine_map[x][y] == '*': count += 1 mine_map[i][j] = str(count) for row in mine_map: print(''.join(row))
C++11(clang++ 3.9) 解法, 执行用时: 6ms, 内存消耗: 468K, 提交时间: 2019-05-29 10:27:35
#include<bits/stdc++.h> using namespace std; int a[105][105]; int main(){ char l; int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>l; if(l=='*')a[i][j]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(a[i][j]==1)cout<<"*"; else cout<<a[i+1][j+1]+a[i][j+1]+a[i+1][j]+a[i-1][j-1]+a[i+1][j-1]+a[i-1][j+1]+a[i-1][j]+a[i][j-1]; if(j==m)cout<<endl; } return 0; }
C 解法, 执行用时: 4ms, 内存消耗: 384K, 提交时间: 2021-11-14 22:58:46
#include<stdio.h> int main() { int n,m,i,j; int d,o,k; scanf("%d %d",&n,&m); int a[100][100]; for(i=0;i<n;i++) { for(j=0;j<=m;j++) { scanf("%c",&a[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<=m;j++) { if(a[i][j]=='*') printf("%c",a[i][j]); else if(a[i][j]=='?') { for(d=0,o=i-1;o<=i+1;o++) { for(k=j-1;k<=j+1;k++) {if(a[o][k]=='*'&&(o!=i||k!=j)) d++;} } printf("%d",d); } } printf("\n"); } return 0; }