扫雷游戏 题解

mac2025-12-17  7

扫雷游戏1

题目信息

略,见链接

解题思路

用bool数组a[][]存下地图上的地雷(是地雷为true,不是地雷为false,初始化全为false)双重循环枚举数组元素,暴力计算结果。 伪代码如下 定义 布尔类型 数组 a[105, 105] 定义 整数类型 变量 n,m 定义 字符类型 变量 tmp FUNCTION main() 输入 n,m a = [[0, 0, ..., 0], [0, 0, ..., 0], ..., [0, 0, ..., 0]] FOR i = 1 TO n STEP 1 FOR j = 1 TO m STEP 1 输入 tmp IF tmp = 字符 ‘*THEN a[i, j] = TRUE END IF END FOR END FOR FOR i = 1 TO n STEP 1 FOR j = 1 TO m STEP 1 IF a[i, j] = TRUE THEN 输出 *ELSE PRINT (a[i + 1, j + 1] + a[i + 1, j - 1] + a[i + 1, j] + a[i, j + 1] + a[i, j - 1] + a[i - 1, j + 1] + a[i - 1, j] + a[i - 1, j - 1]) ' 暴力计算周边地雷数 END IF END FOR 输出 换行 END FOR END FUNCTION

翻译成 C ⁡ + + \operatorname C++ C++就是

#include <bits/stdc++.h> using namespace std; bool a[105][105]; int n, m; int main() { memset(a, 0, sizeof(a)); char tmp; cιn >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cιn >> tmp; if (tmp == '*') a[i][j] = 1; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] == 1) putchar('*'); else printf("%d", a[i + 1][j + 1] + a[i + 1][j - 1] + a[i + 1][j] + a[i][j + 1] + a[i][j - 1] + a[i - 1][j + 1] + a[i - 1][j] + a[i - 1][j - 1]); } putchar('\n'); } return 0; }

2015年NOIP普及组第2题 ↩︎

最新回复(0)