Дана последовательность натуральных чисел 1, 2, 3, n (1 ≤ n ≤ 1000). необходимо сначала расположить в обратном порядке часть этой последовательности от элемента с номером a до элемента с номером b, а затем от c до d (a < b; c < d; 1 ≤ a, b, c, d ≤ n). входные данные вводятся натуральные числа числа n, a, b, c, d. выходные данные требуется вывести полученную последовательность. примеры входные данные 9 2 5 6 9 выходные данные 1 5 4 3 2 9 8 7 6 входные данные 9 3 6 5 8 выходные данные 1 2 6 5 8 7 3 4 9 сделать на pascalabc

lisa1003 lisa1003    1   01.10.2019 12:30    56

Ответы
MrLinar MrLinar  09.10.2020 07:45
PascalABC.NET 3.4.2, сборка 1863 от 10.11.2018Внимание! Если программа не работает, обновите версию!

begin

 var N, A, B, C, D: integer;

 Readln(N, A, B, C, D);

 if A > C then (A, B, C, D) := (C, D, B, A);

 var s := 1.To(A - 1);

 if B < C then // ( ) [ ]

   s := s + B.Downto(A) + (B + 1).To(C - 1) +

       D.Downto(C) + (D + 1).To(N)

 else

 if D < B then // ( [ ] )

 begin

   s := s + SeqGen(C - A, t -> B - t) +

       SeqGen(D - C + 1, t -> t + A + B - D) +

       SeqGen(B - D, t -> A - t + B - D - 1) + (B + 1).To(N)

 end

   else // ( [ ) ]

 begin

   s := s + SeqGen(C - A, t -> B - t) +

       SeqGen(D - B, t -> D - t) + SeqGen(B - C + 1, t -> A + t) +

       (D + 1).To(N);

 end;

 s.Println;

end.

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика