本文介绍: 嵌套循环yyds!欢迎关注我,每日更新蓝桥杯备赛好题 and C++学习日记一起成长:)

蓝桥杯备赛 | 洛谷做题打卡day2

嵌套循环yyds!!

题目来源:洛谷P2670 [NOIP2015 普及组] 扫雷游戏

题目背景

NOIP2015 普及组 T2

题目描述

扫雷游戏是一款十分经典的单机小游戏。在

n

n

n

m

m

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

现在给出

n

n

n

m

m

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

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

行更远的路,见更亮的星

输入格式

第一行是用一个空格隔开的两个整数

n

n

n

m

m

m,分别表示雷区的行数和列数。

接下来

n

n

n 行,每行

m

m

m 个字符,描述了雷区中的地雷分布情况。字符

*

texttt{*}

* 表示相应格子是地雷格,字符

?

texttt{?}

? 表示相应格子是非地雷格。相邻字符之间无分隔符。

输出格式

输出文件包含

n

n

n 行,每行

m

m

m 个字符,描述整个雷区。用

*

texttt{*}

* 表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

样例 #1

样例输入 #1

3 3
*??
???
?*?

样例输出 #1

*10
221
1*1

样例 #2

样例输入 #2

2 3
?*?
*??

样例输出 #2

2*1
*21

提示

对于

100

%

100%

100%的数据,

1

n

100

,

1

m

100

1≤n≤100, 1≤m≤100

1n100,1m100

利用嵌套循环,自己多试试,debug,以下是我的代码~

#include<iostream>
using namespace std;
char s[110][110];
int t = 0;

void find(int a, int b)
{
	if (s[a][b] == '*') t++;
}

int main()
{
	int n, m, cnt = 0;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> s[i][j];
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (s[i][j] == '*') cout << '*';
			if (s[i][j] == '?')
			{
				for (int p = i - 1; p <= i + 1; p++)
				{
					for (int q = j - 1; q <= j + 1; q++) find(p, q);
				}
				cout << t;
				t = 0;
			}
		}
		cout << endl;
	}
	return 0;
}

我的一些话

​很多前辈的题解都很长且包括诸如s[i-1][j-1]一直到s[i+1][j+1]这般冗长的搜索,其实…我觉得直接用循环就好了嘛

两次debug然后AC,嵌套了find函数看起来会稍微简洁一些,其实这题思路不难的——不外乎将字符装进数组,嵌套循环换行,然后分遇‘*’直接输出 ,遇‘?’搜索输出数字两种情况,然后就没有然后了,华丽收场~

欢迎关注我,每日更新蓝桥杯备赛好题 and C++学习日记一起成长:)

原文地址:https://blog.csdn.net/m0_73246124/article/details/135527470

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_56682.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

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