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.