题目
在一个 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 = 0 if 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: continue elif x+i >= n: break else: 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) # 删掉最开始那行0 out.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 = 0
if data[x][y] == 1:
out.append(9)
else:
temp = []
for i in range(-1, 2):
if x+i < 0:
continue
elif x+i >= n:
break
else:
for j in range(-1, 2):
if y+j < 0:
continue
elif y+j >= m:
break
else:
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)