Python 解密炸弹代码程序


假设有一个你需要拆除的炸弹,你的时间不多了!你有一个长度为 n 的循环数组代码和一个密钥 k。现在要解密代码,你必须替换每个数字。所有数字都同时替换。有一些规则:

  • 如果 k > 0,则用后 k 个数字的和替换第 i 个数字。

  • 如果 k < 0,则用前 k 个数字的和替换第 i 个数字。

  • 如果 k = 0,则用 0 替换第 i 个数字。

这里代码是循环的,所以 code[n-1] 的下一个元素是 code[0],code[0] 的前一个元素是 code[n-1]。最后我们必须返回解密后的代码。

因此,如果输入类似于 code = [8,2,3,5],k = 3,则输出将为 [10, 16, 15, 13],因为对于每个密钥,我们用接下来的三个元素的和进行替换,所以 code[0] 将为 10,code[1] 将为 16,code[2] 将为 15,code[3] 将为 13。

为了解决这个问题,我们将遵循以下步骤:

  • decode := 一个新的列表

  • 对于 i 从 0 到 code 的大小 - 1,执行以下操作

    • 如果 k > 0,则

      • sum := 0

      • j := i+1

      • m := k

      • 当 m 不为零时,执行以下操作

        • sum := sum + code[j 模 code 的长度]

        • m := m - 1

        • j := j + 1

      • 在 decode 的末尾插入 sum

    • 否则,当 k 等于 0 时,则

      • 在 decode 的末尾插入 0

    • 否则,

      • sum := 0

      • j := i-1

      • m := k

      • 当 m 不为零时,执行以下操作

        • sum := sum + code[j 模 code 的长度]

        • m := m + 1

        • j := j - 1

      • 在 decode 的末尾插入 sum

  • 返回 decode

示例(Python)

让我们看看以下实现以获得更好的理解:

 实时演示

def solve(code, k):
   decode = []
   for i in range(len(code)):
      if k > 0:
         sum = 0
         j = i+1
         m = k
         while(m):
            sum+=code[j%len(code)]
            m-=1
            j+=1
         decode.append(sum)

      elif k == 0:
         decode.append(0)

      else:
         sum = 0
         j = i-1
         m = k
         while(m):
            sum+=code[j%len(code)]
            m+=1
            j-=1
         decode.append(sum)

   return decode

code = [8,2,3,5]
k = 3
print(solve(code, k))

输入

[8,2,3,5], 3

输出

[10, 16, 15, 13]

更新于: 2021年5月17日

479 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.