Дан целочисленный массив размера n. вывести вначале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а затем — все нечетные числа в порядке убывания их индексов.
procedure quicksort(l,r:integer); var i,j,x,temp:integer; begin i:=l; //левый конец j:=r; //правый конец x:=ar[random(r-l+1)+l]; repeat while ar[i]<x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс while x<ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс if i<=j then //если левый индекс меньше или равен правому-продолжать begin temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; inc(i); //чтобы не запустить бесконечную рекурсию dec(j); end; until i>=j; if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый end;
begin randomize; writeln('First array:'); for s:=1 to n do begin ar[s]:=random(n); write(ar[s]:4); end; quicksort(1,n); writeln; writeln('Final array:'); ar.println; end.
//По убыванию Const n=55;
type ty=array[1..n] of integer;
Var ar:ty; s:integer;
procedure quicksort(l,r:integer); var i,j,x,temp:integer; begin i:=l; //левый конец j:=r; //правый конец x:=ar[random(r-l+1)+l]; repeat while ar[i]>x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс while x>ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс if i<=j then //если левый индекс меньше или равен правому-продолжать begin temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; inc(i); //чтобы не запустить бесконечную рекурсию dec(j); end; until i>=j; if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый end;
begin randomize; writeln('First array:'); for s:=1 to n do begin ar[s]:=random(n); write(ar[s]:4); end; quicksort(1,n); writeln; writeln('Final array:'); ar.println; end.
vallzh8328
19.08.2021
1. Первый элемент массива не менялся, значит M[0] = 3 2. Чтобы получить M[1] надо рассмотреть такой вариант: 14 = MAS[0]*3+X, где Х есть предыдущее значение элемента M[1], получим, что Х = 5 и изначально M[1] = 5 3. Зная второй элемент массива несложно получить и третий: 47 = MAS[1] * 3 + X = 14*3 +X, где Х есть предыдущее значение элемента M[2], получим, что Х = 5 и изначально M[2] = 5 4. Аналогично находим, что первоначальное значение М[3] = 1, а M[4] = 2
5. Значит массив изначально был такой: 3 5 5 1 2
Напишем код на Python для проверки: MAS = [3,5,5,1,2] print(MAS[0],sep=' ', end=' ') for i in range(1,5): MAS[i] +=MAS[i-1]*3 print(MAS[i],sep=' ', end=' ')
Результат: 3 14 47 142 428
ответ: 3 5 5 1 2
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Дан целочисленный массив размера n. вывести вначале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а затем — все нечетные числа в порядке убывания их индексов.
// Внимание! Если программа не работает, обновите версию!
begin;
var a:=ArrRandom(ReadInteger('n='),1,99); a.Println;
(a.Where(x->x.IsEven)+a.Where(x->x.IsOdd).Reverse).Println
end.
Пример
n= 20
94 23 35 11 31 14 63 97 8 65 56 81 18 80 18 38 59 59 28 87
94 14 8 56 18 80 18 38 28 87 59 59 81 65 97 63 31 11 35 23