Урок 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 arr_N = array[1..10] of integer;
var Arr :array [1..10] of integer = (0, 3, 2, 1, 0, 3, 2, 4, 0, -5);
i, j, count :integer;
U_arr :arr_N;
begin
j := 1;
count := 0;
for i := 1 to high(Arr) do
if Arr[i] = 0 then
count += 1
else
begin
U_arr[j] := Arr[i];
j += 1;
end;
for i := 1 to high(U_arr) do
write(U_arr[i], ' ');
if count >= i then
begin
U_arr[i] := 0;
write(U_arr[i], ' ');
end;
readln;
end.
- Log in to post comments
- 2086 reads
vedro-compota
Sun, 10/23/2022 - 17:53
Permalink
Решите со сложностью не более
-- решите с этим условием
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 10/26/2022 - 17:18
Permalink
var Arr :array [1..10] of
var Arr :array [1..10] of integer = (0, 3, 2, 1, 0, 3, 2, 4, 0, -5); i, j, count :integer; begin j := 1; // для смещения в лево чисел отличных от нуля count := 0; // количество нулей for i := 1 to high(Arr) do if Arr[i] <> 0 then begin Arr[j] := Arr[i]; j += 1; end else count += 1; for i := 1 to high(Arr) do if i <= (high(Arr) - count) then write(Arr[i], ' ') else write(0, ' '); readln; end.vedro-compota
Wed, 10/26/2022 - 19:47
Permalink
1) Не надо записывать массив
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 10/30/2022 - 07:35
Permalink
type nar = array [1..10] of
type nar = array [1..10] of integer; var Arr :array [1..10] of integer = (0, 3, 2, 1, 0, 3, 2, 4, 0, -5); i :integer; Barr :nar; function shift(ct :integer; var Barr :nar) :nar; var i :integer; begin for i := ct to high(Barr) - 1 do Barr[i] := Barr[i + 1]; Barr[i + 1] := 0; shift := Barr; end; begin for i := 1 to 10 do Barr[i] := Arr[i]; for i := 1 to high(Barr) do if Barr[i] = 0 then begin Barr := shift(i, Barr); end; for i := 1 to high(Barr) do write(Barr[i], ' '); readln; end.vedro-compota
Sun, 10/30/2022 - 13:08
Permalink
это по сути вложенные циклы.
это по сути вложенные циклы. нужно решение одним, вместо реального номера позиции, на которую нужно переносить очередной элемент, лучше вычислять относительное смещение
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 11/02/2022 - 18:38
Permalink
var Arr :array [1..10] of
var Arr :array [1..10] of integer = (0, 3, 2, 1, 0, 3, 2, 4, 0, -5); i, count :integer; begin count := 0; // количество нулей for i := 1 to high(Arr) do if Arr[i] = 0 then count += 1 else if count > 0 then Arr[i - count] := Arr[i]; for i := 1 to high(Arr) do begin if i > (high(Arr) - count) then Arr[i] := 0; write(Arr[i], ' '); end; readln(); end.vedro-compota
Wed, 11/02/2022 - 19:24
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)