联系电话、微信:志成教育-赵老师:15588622005 (报名请说“西海岸学习吧”有惊喜礼品)

西海岸学习吧

题目背景

NOIP2015 普及组 T2

题目描述

扫雷游戏是一款十分经典的单机小游戏。在  行  列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。

现在给出  行  列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。

注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。

输入格式

第一行是用一个空格隔开的两个整数  和 ,分别表示雷区的行数和列数。

接下来  行,每行  个字符,描述了雷区中的地雷分布情况。字符  表示相应格子是地雷格,字符  表示相应格子是非地雷格。相邻字符之间无分隔符。

输出格式

输出文件包含  行,每行  个字符,描述整个雷区。用  表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

输入输出样例

输入 #1

3 3
*??
???
?*?

输出 #1

*10
221
1*1

输入 #2

2 3
?*?
*??

输出 #2

2*1
*21

说明/提示

对于 的数据,1≤n≤100

 

#include <bits/stdc++.h>
using namespace std;
int dx[]={-1,-1,-1,0,1,1,1,0,-1};
int dy[]={-1,0,1,1,1,0,-1,-1,-1};
int main(){
	char maps[105][105];
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){ cin>>maps[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if (maps[i][j]=='*'){
				cout<<'*';
			}else{
				int cnt=0;
				for(int k=0;k<8;k++){ int nx=i+dx[k]; int ny=j+dy[k]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&maps[nx][ny]=='*'){
						cnt++;
					}
				}
				cout<<cnt;
			}
		}
		cout<<endl;
	}
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

const int N=110;
char a[N][N];
int b[N][N];

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){ cin>>a[i][j];
			if(a[i][j]=='*'){
				for(int p=i-1;p<=i+1;p++){
					for(int q=j-1;q<=j+1;q++){
						b[p][q]++;	
					}
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
		    if(a[i][j]=='*') cout<<"*";
		    else cout<<b[i][j];
	    }
		cout<<endl;
    }
	return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注