Lấy cảm hứng từ một câu hỏi tại Stack Overflow .
Cho một mảng số nguyên không trống x
và một số nguyên dương n
, tính tổng của từng khối chiều dài trượtn
dọc theo mảng x
, điền tròn các giá trị còn thiếu ở bên trái với các giá trị từ bên phải như sau:
- khối đầu tiên chứa mục đầu tiên của
x
, trướcn-1
các mục được dịch chuyển tròn; - khối thứ hai có các mục đầu tiên và thứ hai
x
, trướcn-2
các mục được dịch chuyển tròn; vân vân
Mảng đầu ra y
có cùng kích thước với x
. Có thể n
vượt quá độ dài x
và sau đó các giá trị x
được sử dụng lại nhiều lần .
Ví dụ
Ví dụ 1 (các giá trị chỉ được sử dụng lại một lần)
x = [2, 4, -3, 0, -4]
n = 3
đưa ra như đầu ra
y = [-2, 2, 3, 1, -7]
Ở đâu
-2
là tổng của khối[0, -4, 2]
(hai giá trị đầu tiên đến từ sự dịch chuyển tròn)2
là tổng của[-4, 2, 4]
(giá trị đầu tiên đến từ sự dịch chuyển tròn)3
là tổng của[2, 4, -3]
(không cần dịch chuyển vòng tròn nữa)1
là tổng của[4, -3, 0]
-7
là tổng của[-3, 0, -4]
.
Ví dụ 2 (các giá trị được sử dụng lại nhiều lần)
x = [1, 2]
n = 5
đưa cho
y = [7, 8]
Ở đâu
7
là tổng của khối[1, 2, 1, 2, 1]
(bốn giá trị đầu tiên đã được sử dụng lại theo vòng tròn)8
là tổng của khối[2, 1, 2, 1, 2]
(ba giá trị đầu tiên đã được sử dụng lại theo vòng tròn)
Quy tắc bổ sung
- Thuật toán sẽ làm việc cho các mảng có kích thước tùy ý và cho các giá trị nguyên tùy ý. Có thể chấp nhận nếu chương trình bị giới hạn bởi loại dữ liệu hoặc giới hạn bộ nhớ; nhưng các giá trị nguyên dương cũng như âm phải được xử lý.
- Đầu vào / đầu ra có thể được lấy / sản xuất bằng bất kỳ phương tiện hợp lý nào .
- Các chương trình hoặc chức năng được cho phép, trong bất kỳ ngôn ngữ lập trình . Sơ hở tiêu chuẩn bị cấm.
- Mã ngắn nhất trong byte thắng.
Các trường hợp thử nghiệm
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]