扫雷游戏
题目信息
略,见链接
解题思路
用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题 ↩︎