Сдвинуть последовательность - Pascal
Формулировка задачи:
Дана последовательность из N (1 ≤ N ≤ 100000) целых чисел и число K (|K| ≤ 100000). Сдвинуть всю последовательность на |K| элементов вправо, если K – положительное и влево, если отрицательное, и вывести (не меняя элементы массива местами)
Ограничение 1 секунда.
Подскажите, как сделать рациональнее
var n,i,m:integer; a:array[1..100000] of integer; begin readln(n); for i:=1 to n do read(a[i]); read(m); if m>=0 then begin m:=(m mod n); for i:=(n-m+1) to n do write(a[i], ' '); for i:=1 to (n-m) do write(a[i], ' '); m:=1; end; if m<0 then begin m:=abs(m); m:=(m mod n)+1; for i:=m to n do write(a[i], ' '); for i:=1 to m-1 do write(a[i], ' '); m:=1 end; end.
Решение задачи: «Сдвинуть последовательность»
textual
Листинг программы
var n, k, i: Integer; a: array[0..99999] of Integer; begin Read(n); for i:=0 to n-1 do Read(a[i]); Read(k); k:=k mod n; for i:=Ord(k>=0)*n-k to n-1 do Write(' ',a[i]); for i:=0 to Ord(k>=0)*n-k-1 do Write(' ',a[i]); end.
Объяснение кода листинга программы
- Объявляется переменная
n
типа Integer для сохранения размера последовательности. - Объявляется переменная
k
типа Integer для хранения значения, на которое нужно сдвинуть последовательность. - Объявляется переменная
i
типа Integer для использования в циклах. - Объявляется массив
a
размером до 100000 целых чисел (Integer). - Считывается значение
n
с помощью функции Read. - В цикле от 0 до
n-1
считывается последовательность чисел и сохраняется в массивa
. - Считывается значение
k
с помощью функции Read. - Значение
k
изменяется на остаток от деления наn
, чтобы учесть крайние случаи сдвига. - В цикле от
Ord(k>=0)*n-k
доn-1
выводятся элементы последовательности, начиная с элемента, на который произошел сдвиг. - В цикле от 0 до
Ord(k>=0)*n-k-1
выводятся элементы последовательности, до элемента, на который произошел сдвиг.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д