> 文章列表 > 扫雷最大降雨量

扫雷最大降雨量

扫雷最大降雨量

题目

 

在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。

请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。

输入描述

输入的第一行包含两个整数 n,m。

第 2行到第n+1 行每行包含m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为1,表示这一格有地雷。

其中,1≤n,m≤100 分钟后还是在当天。

输出描述

输出n 行,每行m 个整数,相邻整数之间用空格分隔。

对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。

思路

暴力去遍历周围为1的值 最后相加起来 

代码

  • 使用numpy
  • 
    import numpy as np
    # 请在此输入您的代码
    n, m = map(int, input().split())
    data = []
    for i in range(n):data.append(list(map(int, input().split())))
    out = []
    for x in range(n):for y in range(m):add = 0if data[x][y] == 1:out.append(9)else:add = np.array([[0, 0, 0]]) # 后面要append就先初始化一个 最后会删掉for i in range(-1, 2):if x+i < 0:continueelif x+i >= n:breakelse:if y < 1:  # 防止下标为负数的情况temp = data[x+i][0: y+2]else:temp = data[x + i][y - 1: y + 2]if len(temp) < 3: # 不足3位的进行0补足temp = np.pad(temp, (0, 3-len(temp)), 'constant', constant_values=(0, 0))add = np.append(add, [temp], axis=0)add = np.delete(add, 0, axis=0) # 删掉最开始那行0out.append(int(add.sum())) # 将1值进行求和并添加到out中for i in range(n):j = int(i*m)print(out[j: j+m])
    
  • 不用numpy 
import os
import sys# 请在此输入您的代码
n, m = map(int, input().split())
data = []
for i in range(n):data.append(list(map(int, input().split())))
out = []
for x in range(n):for y in range(m):add = 0if data[x][y] == 1:out.append(9)else:temp = []for i in range(-1, 2):if x+i < 0:continueelif x+i >= n:breakelse:for j in range(-1, 2):if y+j < 0:continueelif y+j >= m:breakelse:temp.append(data[x+i][j+y])out.append(int(sum(temp)))for i in range(n):j = int(i*m)print(str(out[j:j+m]).replace('[','').replace(']','').replace(",",''))

 题目

于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。

这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一共持续 7周,每天小明都要使用一张法术符,法术符不能重复使用。

每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术 施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。

由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?

思路

自己画了1-14,发现除掉最大三位数后,得到的最大数就是最大的一个中位数,第二个中位数就在离该数前面3个的位置。也就是11是最大的一个中位数,然后中间的10、9、8都不能成为下一个中位数,因为比它们大的数字都被用掉了(第四位就是中位数 所以应该有3个大的数字在后面,该数才能成为中位数),所以第二个中位数最大只能是7.按此思路,1-49时的中位数就应该是 46、42、38、34、30、26、22。这七个数的中位数就是34.

代码

# 直接print结果
print(34)