解题思路
大致思路:你需要知道地图大小、火把个数、萤石个数,并初始化地图,然后根据用户输入的火把(或萤石)坐标,并根据对应的照亮范围点亮,剩余未点亮的部分(暗区)将出现怪物。
因此有了大致的流程图:
💡 关于点亮范围的实现方法:
- 火把:可以通过遍历 for 循环来分别实现横向 / 纵向点亮火把所在方位,剩余附近部分则单独点亮;
- 萤石:通过两层嵌套 for 循环将萤石附近区域点亮。
代码参考
1 2 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; }
|
提示:代码部分仅作为参考,可直接在原有基础上再度优化或简化。