Урок 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
- 896 reads