【C语言代码】【Mc生存】插火把

此题可巩固二维数组。

题目背景

初一党应该都知道……

题目描述

话说有一天 linyorson 在“我的世界”开了一个 n×n(n≤100)n×n(n≤100) 的方阵,现在他有 mm 个火把和 kk 个萤石,分别放在 (x1,y1)…(xm,ym)(x1​,y1​)…(xm​,ym​) 和 (o1,p1)…(ok,pk)(o1​,p1​)…(ok​,pk​) 的位置,没有光或没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?

P.S.火把的照亮范围是:

    |暗|暗| 光 |暗|暗|
    |暗|光| 光 |光|暗|
    |光|光|火把|光|光|
    |暗|光| 光 |光|暗|
    |暗|暗| 光 |暗|暗|

萤石:

    |光|光| 光 |光|光|
    |光|光| 光 |光|光|
    |光|光|萤石|光|光|
    |光|光| 光 |光|光|
    |光|光| 光 |光|光|

输入格式

输入共m+k+1行。

第一行为n,m,k。

第2到第m+1行分别是火把的位置xi yi。

第m+2到第m+k+1行分别是萤石的位置oi pi。

注:可能没有萤石,但一定有火把。

所有数据保证在int范围内。

输出格式

有几个点会生出怪物。

输入输出样例

输入 #1

5 1 0
3 3

输出 #1

12
此代码未经检测及质量不高,请仔细甄别!
#include <stdio.h>

int main()
{
    int fz[100][100];
    int n, m, k;
    int i, j;
    int x, y;
    int h, b, o, p;
    scanf("%d%d%d", &n, &m, &k);
    //初始化数组为0
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            fz[i][j] = 0;

    //火把照亮
    for (i = 0; i < m; i++)
    {
        scanf("%d%d", &h, &b);
        x = h - 1;
        y = b - 1;
        if (x >= 0 && y >= 0 && x < n && y < n)
            fz[x][y] = 1;
        if (x >= 0 && (y - 1) >= 0 && x < n && (y - 1) < n)
            fz[x][y - 1] = 1;
        if (x >= 0 && (y - 2) >= 0 && x < n && (y - 2) < n)
            fz[x][y - 2] = 1;
        if (x >= 0 && (y + 1) >= 0 && x < n && (y + 1) < n)
            fz[x][y + 1] = 1;
        if (x >= 0 && (y + 2) >= 0 && x < n && (y + 2) < n)
            fz[x][y + 2] = 1;
        if ((x - 1) >= 0 && y >= 0 && (x - 1) < n && y < n)
            fz[x - 1][y] = 1;
        if ((x - 2) >= 0 && y >= 0 && (x - 2) < n && y < n)
            fz[x - 2][y] = 1;
        if ((x + 1) >= 0 && y >= 0 && (x + 1) < n && y < n)
            fz[x + 1][y] = 1;
        if ((x + 2) >= 0 && y >= 0 && (x + 2) < n && y < n)
            fz[x + 2][y] = 1;
        if ((x + 1) >= 0 && (y + 1) >= 0 && (x + 1) < n && (y + 1) < n)
            fz[x + 1][y + 1] = 1;
        if ((x - 1) >= 0 && (y - 1) >= 0 && (x - 1) < n && (y - 1) < n)
            fz[x - 1][y - 1] = 1;
        if ((x + 1) >= 0 && (y - 1) >= 0 && (x + 1) < n && (y - 1) < n)
            fz[x + 1][y - 1] = 1;
        if ((x - 1) >= 0 && (y + 1) >= 0 && (x - 1) < n && (y + 1) < n)
            fz[x - 1][y + 1] = 1;
    }

    //萤石照亮
    for (i = 0; i < k; i++)
    {
        scanf("%d%d", &o, &p);
        x = o - 1;
        y = p - 1;
        if (x >= 0 && y >= 0 && x < n && y < n)
            fz[x][y] = 1;
        if (x >= 0 && (y - 1) >= 0 && x < n && (y - 1) < n)
            fz[x][y - 1] = 1;
        if (x >= 0 && (y - 2) >= 0 && x < n && (y - 2) < n)
            fz[x][y - 2] = 1;
        if (x >= 0 && (y + 1) >= 0 && x < n && (y + 1) < n)
            fz[x][y + 1] = 1;
        if (x >= 0 && (y + 2) >= 0 && x < n && (y + 2) < n)
            fz[x][y + 2] = 1;
        if ((x - 1) >= 0 && y >= 0 && (x - 1) < n && y < n)
            fz[x - 1][y] = 1;
        if ((x - 2) >= 0 && y >= 0 && (x - 2) < n && y < n)
            fz[x - 2][y] = 1;
        if ((x + 1) >= 0 && y >= 0 && (x + 1) < n && y < n)
            fz[x + 1][y] = 1;
        if ((x + 2) >= 0 && y >= 0 && (x + 2) < n && y < n)
            fz[x + 2][y] = 1;
        if ((x + 1) >= 0 && (y + 1) >= 0 && (x + 1) < n && (y + 1) < n)
            fz[x + 1][y + 1] = 1;
        if ((x - 1) >= 0 && (y - 1) >= 0 && (x - 1) < n && (y - 1) < n)
            fz[x - 1][y - 1] = 1;
        if ((x + 1) >= 0 && (y - 1) >= 0 && (x + 1) < n && (y - 1) < n)
            fz[x + 1][y - 1] = 1;
        if ((x - 1) >= 0 && (y + 1) >= 0 && (x - 1) < n && (y + 1) < n)
            fz[x - 1][y + 1] = 1;
        if ((x + 2) >= 0 && (y + 2) >= 0 && (x + 2) < n && (y + 2) < n)
            fz[x + 2][y + 2] = 1;
        if ((x - 2) >= 0 && (y - 2) >= 0 && (x - 2) < n && (y - 2) < n)
            fz[x - 2][y - 2] = 1;
        if ((x + 2) >= 0 && (y - 2) >= 0 && (x + 2) < n && (y - 2) < n)
            fz[x + 2][y - 2] = 1;
        if ((x - 2) >= 0 && (y + 2) >= 0 && (x - 2) < n && (y + 2) < n)
            fz[x - 2][y + 2] = 1;
        if ((x - 1) >= 0 && (y - 2) >= 0 && (x - 1) < n && (y - 2) < n)
            fz[x - 1][y - 2] = 1;
        if ((x + 1) >= 0 && (y - 2) >= 0 && (x + 1) < n && (y - 2) < n)
            fz[x + 1][y - 2] = 1;
        if ((x + 1) >= 0 && (y + 2) >= 0 && (x + 1) < n && (y + 2) < n)
            fz[x + 1][y + 2] = 1;
        if ((x - 1) >= 0 && (y + 2) >= 0 && (x - 1) < n && (y + 2) < n)
            fz[x - 1][y + 2] = 1;
        if ((x - 2) >= 0 && (y - 1) >= 0 && (x - 2) < n && (y - 1) < n)
            fz[x - 2][y - 1] = 1;
        if ((x + 2) >= 0 && (y - 1) >= 0 && (x + 2) < n && (y - 1) < n)
            fz[x + 2][y - 1] = 1;
        if ((x + 2) >= 0 && (y + 1) >= 0 && (x + 2) < n && (y + 1) < n)
            fz[x + 2][y + 1] = 1;
        if ((x - 2) >= 0 && (y + 1) >= 0 && (x - 2) < n && (y + 1) < n)
            fz[x - 2][y + 1] = 1;
    }

    //测试地图生成
    //for (i = 0; i < n; i++)
    //{
    //    for (j = 0; j < n; j++)
    //        printf("%d",fz[i][j]);
    //    printf("\n");
    //}

    int gw = 0;

    //判定怪物生成
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (fz[i][j] == 0)
                gw++;

    printf("%d", gw);

    return 0;
}
如需转载,请注明出处。

【C语言代码】【Mc生存】插火把
https://blog.ethan0ne.com/%e3%80%90c%e8%af%ad%e8%a8%80%e4%bb%a3%e7%a0%81%e3%80%91%e3%80%90mc%e7%94%9f%e5%ad%98%e3%80%91%e6%8f%92%e7%81%ab%e6%8a%8a/
作者:Ethan (@ethan0ne)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇