蓝桥杯备赛 | 洛谷做题打卡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
1≤n≤100,1≤m≤100。
利用嵌套循环,自己多试试,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进行投诉反馈,一经查实,立即删除!