Сдвинуть последовательность - 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выводятся элементы последовательности, до элемента, на который произошел сдвиг.