Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình giải mã code giải giáp bom trong Python

Giả sử có quả bom cần giải giáp, thời gian đang cạn kiệt! Ta có mảng vòng tròn code độ dài n và khóa k. Để giải mã, phải thay thế mọi số đồng thời. Quy tắc:

  • Nếu k > 0: thay số thứ i bằng tổng k số tiếp theo
  • Nếu k < 0: thay số thứ i bằng tổng |k| số trước đó
  • Nếu k = 0: thay số thứ i bằng 0

Mảng là vòng tròn: phần tử sau code[n-1] là code[0], phần tử trước code[0] là code[n-1]. Trả về mã đã giải mã.

Ví dụ: code = [8,2,3,5], k = 3, kết quả [10, 16, 15, 13].

Giải thuật

  1. decode := []
  2. Với mỗi i từ 0 đến len(code)-1:
    • Nếu k > 0: cộng k phần tử sau i (mod n)
    • Nếu k == 0: thêm 0
    • Nếu k < 0: cộng |k| phần tử trước i (mod n)
  3. Trả về decode

Ví dụ (Python)

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

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

Input

[8,2,3,5], 3

Output

[10, 16, 15, 13]