【问题标题】:How to solve a problem of array in python?如何解决python中的数组问题?
【发布时间】:2019-08-10 10:54:30
【问题描述】:

假设有一个 5x5 的网格阵列,仅由 1 和 0 组成(1 是船,0 是水)。我们有炸弹的位置(1x1)和它的爆炸半径。如果必须确定有多少艘船被摧毁?

我尝试使用 if-else 解决此问题,它显示半径 = 1 的正确答案,但半径 = 2 的错误答案。如果有人有更小的代码,那就太好了。

grid = np.array([[0,1,1,0,1],[0,0,1,1,1],[1,1,1,0,0],[1,0,0,1,1],[0,0,0,1,0]])
bomb_coordinate = grid[1][1]
radius = 1
ship_count = 0
a, b = 1,1

if a==0:
    if b == 0:
        for i in range(a, a+radius+1):
            for j in range(b, b+radius+1):
                if grid[i][j] == 1:
                    ship_count += 1
    elif b == 4:
        for i in range(a , a+radius+1):
            for j in range(b-radius, b+1):
                if grid[i][j] == 1:
                    ship_count += 1
    else:
        for i in range(a, a+radius+1):
            for j in range(b-radius, b+radius+1):
                if grid[i][j] == 1:
                    ship_count +=1
elif a == 4:
    if b == 0:
        for i in range(a-radius, a+1):
            for j in range(b, b+radius+1):
                if grid[i][j] == 1:
                    ship_count += 1
    elif b == 4:
        for i in range(a-radius , a+1):
            for j in range(b-radius, b+1):
                if grid[i][j] == 1:
                    ship_count += 1
    else:
        for i in range(a-radius, a+1):
            for j in range(b-radius, b+radius+1):
                if grid[i][j] == 1:
                    ship_count +=1
else:
    if b == 0:
        for i in range(a-radius, a+radius+1):
            for j in range(b, b+radius+1):
                if grid[i][j] == 1:
                    ship_count += 1
    elif b == 4:
        for i in range(a-radius , a+radius+1):
            for j in range(b-radius, b+1):
                if grid[i][j] == 1:
                    ship_count += 1
    else:
        for i in range(a-radius, a+radius+1):
            for j in range(b-radius, b+radius+1):
                if grid[i][j] == 1:
                    ship_count +=1

【问题讨论】:

    标签: python arrays list


    【解决方案1】:

    我得到了答案,它缩短了我的代码并给出了完美的答案。

    '''

    grid = np.array([[0,1,1,0,1],[0,0,1,1,1],[1,1,1,0,0],[1,0,0,1,1],[0,0,0,1,0]])
    
    new_grid = np.pad(grid, pad_width = 1, mode = 'constant', constant_values = 0)
    
    radius = 1
    
    bomb_coordinate = new_grid[1+radius][1+radius]
    
    ship_count = 0
    
    a, b = 1 + radius, 1+radius
    
    for i in range(a-radius, a+radius+1):
        for j in range(b-radius, b+radius+1):
            if new_grid[i][j] == 1:
                ship_count += 1
    

    '''

    在这里,numpy 库中的填充函数发挥了神奇的作用。

    【讨论】:

    • 很高兴您解决了半径问题。你有没有看我的回答?您仍然不需要嵌套的 for 循环。 if np.any(grid[a-radius: a+radius+1, b-radius: b+radius+1]): ship_count += 1 应该更高效。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多