Найти - Пользователи
Полная версия: Циклический сдвиг массива
Начало » Центр помощи » Циклический сдвиг массива
1
valoroso
Добрый вечер. Решаю задачу на сайте

Текст задачи:

Напишите эффективную программу, которая будет циклически сдвигать заданный массив на k элементов вправо. Дополнительные массивы и рекурсию не использовать.

Входные данные
На вход программе сначала подаются значения n100 — количество элементов в массиве и k100. В следующей строке входных данных расположены сами элементы массива — целые числа, по модулю не превосходящие 30 000.

Выходные данные
Выдайте значения элементов массива после выполнения указанной операции.

Примеры
входные данные
5 3
5 4 3 2 1
выходные данные
3 2 1 5 4

Перепробовал, много разных кодов:
 n, m = input().split()
n = int(n)
k = int(m)
array = input().split()
for i in range(len(array)):
    array[i] = int(array[i])
k=k%len(array)
print(array[-k:] + array[:-k])
и с pop/ append
 n, m = input().split()
n = int(n)
m = int(m)
arr = input().split()
for i in range(len(arr)):
    arr[i] = int(arr[i])
z = 0
while z < m-1:
    x = arr.pop(0)
    print(x)
    arr.append(x)
    z+= 1
 
print(arr)
и даже такой
n, m = input().split()
n = int(n)
k = int(m)
array = input().split()
for i in range(len(array)):
array[i] = int(array[i])
k=k%len(array)
if k==len(array) or k == 0:
print(array)
else:
c = n - k
while c < n:
array.append(array[c])
c+=1

c = n - k
while c>=0:
array[c+k]=array[c]
c-=1

c = n - k
i = k - 1
while c < n:
array[i] = array.pop()
c+=1
i-=1

print(array)

Пишет - неправильный формат вывода.
В чем проблема? Кроме того, что неправильный формат) Где ошибка в коде. Или может я не так понял задание?
scidam
Если можно использовать стандартный модуль collections из Python, то решение очень просто:
 from collections import deque
d = deque(yourlist)
d.rotate(k)
result = list(d)
FishHook
Сзаду достаем, вперед вставляем
 def shift(lst, k):
    for _ in range(k):
        last = lst.pop()
        lst.insert(0, last)
l = [1, 2, 3, 4, 5]
shift(l, 3)
print(l)
valoroso
Как ни странно, тут проблема в неправильном понимании задания, а конкретно выходных значений.
Ради интереса добавил строчку:
 i = 0
while i!=len(arr):
    print(arr[i])
    i+=1
И сразу тест прошел…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB