炸弹人--枚举

炸弹人–枚举

要求

‘#’代表墙,‘G’代表敌人,‘.’代表空地,炸弹安放在空地上,炸弹威力不能穿过墙,哪里安放炸弹炸死的敌人最多?

思路

对每个点进行枚举,上下左右统计可消灭敌人的数量。

代码

#include <stdio.h>

int main() 
{
    char a[13][13] = {
                        "#############",
                        "#GG.GGG#GGG.#",
                        "###.#G#G#G#G#",
                        "#.......#..G#",
                        "#G#.###.#G#G#",
                        "#GG.GGG.#.GG#",
                        "#G#.#G#.#.#.#",
                        "##G...G.....#",
                        "#G#.#G###.#G#",
                        "#...G#GGG.GG#",
                        "#G#.#G#G#.#G#",
                        "#GG.GGG#G.GG#",
                        "#############"
                      };
    int b[13][13];
    int x,y;

    for (int i = 1; i < 13; ++i)
    {
        for (int j = 1; j < 13; ++j)
        {
            if (a[i][j] != '.') {
                continue;
            }

            x = i;
            y = j;
            while(a[x][y] != '#') {  //right
                y++;
                if(a[x][y] == 'G') {
                    b[i][j]++;
                }
            }

            x = i;
            y = j;
            while(a[x][y] != '#') {  //down
                x++;
                if(a[x][y] == 'G') {
                    b[i][j]++;
                }
            }

            x = i;
            y = j;
            while(a[x][y] != '#') {  //left
                y--;
                if(a[x][y] == 'G') {
                    b[i][j]++;
                }
            }

            x = i;
            y = j;
            while(a[x][y] != '#') {  // up
                x--;
                if(a[x][y] == 'G') {
                    b[i][j]++;
                }
            }

        }
    }


    for (int i = 0; i < 13; ++i)
    {
        for (int j = 0; j < 13; ++j)
        {
            printf("%c ", a[i][j]);
        }
        printf("\n");
    }

    printf("\n");
    for (int i = 0; i < 13; ++i)
    {
        for (int j = 0; j < 13; ++j)
        {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }

    return 0;
}

结果:

# # # # # # # # # # # # #
# G G . G G G # G G G . #
# # # . # G # G # G # G #
# . . . . . . . # . . G #
# G # . # # # . # G # G #
# G G . G G G . # . G G #
# G # . # G # . # . # . #
# # G . . . G . . . . . #
# G # . # G # # # . # G #
# . . . G # G G G . G G #
# G # . # G # G # . # G #
# G G . G G G # G . G G #
# # # # # # # # # # # # #

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 5 0 0 0 0 0 0 0 11 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 0 0 0 2 0 1 0 4 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 5 0 0 0 6 0 5 0 0 0
0 0 0 0 0 0 0 1 0 3 0 8 0
0 0 0 2 2 5 0 3 2 5 2 10 0
0 0 0 0 0 0 0 0 0 3 0 0 0
0 4 1 1 0 0 0 0 0 8 0 0 0
0 0 0 0 0 0 0 0 0 3 0 0 0
0 0 0 5 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

python 代码

a =["#############",
    "#GG.GGG#GGG.#",
    "###.#G#G#G#G#",
    "#.......#..G#",
    "#G#.###.#G#G#",
    "#GG.GGG.#.GG#",
    "#G#.#G#.#.#.#",
    "##G...G.....#",
    "#G#.#G###.#G#",
    "#...G#GGG.GG#",
    "#G#.#G#G#.#G#",
    "#GG.GGG#G.GG#",
    "#############"]

n = 13
b = [([0] * n) for i in range(n)]

def mprint(x):
    for i in range(0, n):
        print(x[i])

for i in range(0, n):
    for j in range(0, n):
        if a[i][j] != '.':
            continue

        x = i
        y = j
        while a[x][y] != '#':  # right
            y  = y + 1
            if a[x][y] == 'G':
                b[i][j] = b[i][j] + 1

        x = i
        y = j
        while a[x][y] != '#':  # down
            x  = x + 1
            if a[x][y] == 'G':
                b[i][j] = b[i][j] + 1

        x = i
        y = j
        while a[x][y] != '#':  # left
            y  = y - 1
            if a[x][y] == 'G':
                b[i][j] = b[i][j] + 1

        x = i
        y = j
        while a[x][y] != '#':  # up
            x  = x - 1
            if a[x][y] == 'G':
                b[i][j] = b[i][j] + 1

mprint(a)
mprint(b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值