Giả sử có một quả bom mà bạn định giải phóng, và thời gian của bạn sắp hết! Bạn có một mã mảng tròn có độ dài là n và có khóa k. Bây giờ để giải mã mã, bạn phải thay thế mọi số. Tất cả các số được thay thế đồng thời. Có một số quy tắc -
-
Nếu k> 0 thì thay số thứ i bằng tổng k số tiếp theo.
-
Nếu k <0 thì thay số thứ i bằng tổng của k số trước đó.
-
Nếu k =0 thì thay số thứ i bằng 0.
Ở đây mã là vòng tròn, vì vậy phần tử tiếp theo của mã [n-1] là mã [0], và phần tử trước của mã [0] là mã [n-1]. Cuối cùng, chúng tôi phải trả lại mã đã giải mã.
Vì vậy, nếu đầu vào giống như mã =[8,2,3,5], k =3, thì đầu ra sẽ là [10, 16, 15, 13], bởi vì, với mỗi khóa, chúng tôi thay thế bằng tổng ba phần tử tiếp theo , do đó mã [0] sẽ là 10, mã [1] sẽ là 16, mã [2] sẽ là 15 và mã [3] sẽ là 13.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau &mius;
-
decode:=một danh sách mới
-
đối với tôi trong phạm vi từ 0 đến kích thước của mã - 1, thực hiện
-
nếu k> 0, thì
-
tổng:=0
-
j:=i + 1
-
m:=k
-
trong khi m khác 0, thực hiện
-
sum:=sum + code [j mod độ dài của mã]
-
m:=m - 1
-
j:=j + 1
-
-
chèn tổng vào cuối giải mã
-
-
ngược lại khi k giống 0 thì
-
chèn 0 vào cuối giải mã
-
-
nếu không,
-
tổng:=0
-
j:=i-1
-
m:=k
-
trong khi m khác 0, thực hiện
-
sum:=sum + code [j mod độ dài của mã]
-
m:=m + 1
-
j:=j - 1
-
-
chèn tổng vào cuối giải mã
-
-
-
trả về giải mã
Ví dụ (Python)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def giải quyết (mã, k):giải mã =[] cho tôi trong phạm vi (len (mã)):nếu k> 0:sum =0 j =i + 1 m =k trong khi (m):sum + =mã [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 decodecode =[8,2,3,5] k =3print (Giải (code, k))Đầu vào
[8,2,3,5], 3Đầu ra
[10, 16, 15, 13]