解题思路
大致思路:你需要知道地图大小、火把个数、萤石个数,并初始化地图,然后根据用户输入的火把(或萤石)坐标,并根据对应的照亮范围点亮,剩余未点亮的部分(暗区)将出现怪物。
因此有了大致的流程图:
 
💡 关于点亮范围的实现方法:
- 火把:可以通过遍历 for 循环来分别实现横向 / 纵向点亮火把所在方位,剩余附近部分则单独点亮;
- 萤石:通过两层嵌套 for 循环将萤石附近区域点亮。
代码参考
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 
 | #include <stdio.h>
 int main()
 {
 int n, m, k;
 int mX, mY, kX, kY;
 int zombie = 0;
 
 scanf("%d %d %d", &n, &m, &k);
 
 int map[105][105];
 
 for (int i = 0; i < n; i++)
 {
 for (int j = 0; j < n; j++)
 {
 map[i][j] = 0;
 }
 }
 for (int i = 0; i < m; i++) {
 scanf("%d %d", &mX, &mY);
 
 for (int x = mX - 3; x < mX + 2; x++)
 {
 map[x][mY-1] = 1;
 }
 for (int y = mY - 3; y < mY + 2; y++)
 {
 map[mX-1][y] = 1;
 }
 
 map[mX - 1 - 1][mY - 1 - 1] = 1;
 map[mX - 1 - 1][mY - 1 + 1] = 1;
 map[mX - 1 + 1][mY - 1 - 1] = 1;
 map[mX - 1 + 1][mY - 1 + 1] = 1;
 }
 for (int i = 0; i < k; i++)
 {
 scanf("%d %d", &kX, &kY);
 
 for (int x = kX - 3; x < kX + 2; x++)
 {
 for (int y = kY - 3; y < kY + 2; y++)
 {
 map[x][y] = 1;
 }
 
 }
 }
 
 for (int i = 0; i < n; i++)
 {
 for (int j = 0; j < n; j++)
 {
 
 if (map[i][j] == 0)
 {
 zombie++;
 }
 
 }
 
 }
 printf("%d", zombie);
 return 0;
 }
 
 | 
提示:代码部分仅作为参考,可直接在原有基础上再度优化或简化。