Вопрос задан 03.08.2026 в 21:47. Предмет Информатика. Спрашивает Янчук Наталя.

Напишите программу, которая выполняет циклический сдвиг части массива, начиная с элемента с номером K и заканчивая элементом с номером M (включительно), влево на R элементов. Нумерация элементов массива начинается с единицы. Входные данные Первая строка содержит размер массива N. Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 0 < N ≤ 10000. В третьей строке через пробел записаны два числа – K (0 < K ≤ N) и M (K ≤ M ≤ N). В четвертой строке записана величина сдвига R (0 ≤ R ≤ N). Выходные данные Программа должна вывести в одну строчку все элементы получившегося массива, разделив их пробелами.

Перейти к ответам

Ответы на вопрос

Отвечает Самохвалов Женя.

Для циклического сдвига нужно работать только с частью массива от элемента с номером K до элемента с номером M включительно.

Поскольку в условии элементы нумеруются с единицы, а индексы списка в Python начинаются с нуля, этому фрагменту соответствует срез:

a[k - 1:m]

Длина сдвигаемого фрагмента равна:

length = m - k + 1

Если величина R больше длины фрагмента, достаточно взять остаток от деления R на длину фрагмента. Например, сдвиг фрагмента длины 5 на 7 элементов равносилен сдвигу на 2 элемента.

n = int(input())
a = list(map(int, input().split()))

k, m = map(int, input().split()) r = int(input())

left = k - 1 right = m

length = m - k + 1 r %= length

part = a[left:right] a[left:right] = part[r:] + part[:r]

print(*a)

Алгоритм выполняется следующим образом:

  1. Определяются границы нужной части массива.

  2. Из массива выделяется фрагмент от K до M.

  3. Величина сдвига уменьшается по модулю длины фрагмента.

  4. Фрагмент разделяется на две части:

    • элементы начиная с позиции R;

    • первые R элементов.

  5. Эти части меняются местами, после чего полученный фрагмент записывается обратно в массив.

Например, для массива:

1 2 3 4 5 6 7

при K = 2, M = 6 и R = 2 сдвигается фрагмент:

2 3 4 5 6

После циклического сдвига влево на два элемента он принимает вид:

4 5 6 2 3

Итоговый массив:

1 4 5 6 2 3 7

Временная сложность алгоритма — O(N), так как необходимо сформировать изменённый фрагмент и вывести весь массив. Дополнительная память — O(M - K + 1).

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос