扫雷&&最大降雨量

题目

 

在一个 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值