Урок 23 Задача 2
Primary tabs
Есть массив (пусть не более 10 элементов):
[0, 3, 2, 1, 0, 3, 2, 4, 0, -5]Задача: перенести все нули в конец, так чтобы в итоге получилось:
[3, 2, 1, 3, 2, 4, -5, 0, 0, 0]Решите:
Любым способом
Решите со сложностью не более чем 2N (не заводя дополнительных массивов)Примечание: давалась как простая разминочная задачка для собеседования в Яндекс.
type massiv = array[1..10] of integer; var m: massiv; i, // счетчик x // шаг сдвига : integer; begin m[1] := 0; m[2] := 3; m[3] := 2; m[4] := 1; m[5] := 0; m[6] := 3; m[7] := 2; m[8] := 4; m[9] := 0; m[10] := -5; x:= 1; // начальный шаг сдвига i:= low(m); while not(i+x > high(m)) do // пока сдвиг не заходит за пределы массива begin if m[i] = 0 then // если встретился 0 begin if m[i+x] = 0 then // если, в случае сдвига, снова встретится 0 x:= x + 1 // увеличиваем шаг сдвига else begin // если, в случае сдвига, встретится не 0 m[i]:= m[i+x]; // сдвигаем m[i+x]:=0; // в позицию "сдвинутого" числа пишем 0 end; end; if not (m[i] = 0) then // если элемент не 0 i:= i+1; // переходим к след. элементу end; for i:= low(m) to high(m) do write(m[i], ' '); readln(); end.
Консоль:
3 2 1 3 2 4 -5 0 0 0
- Log in to post comments
- 450 reads