Помощь - Поиск - Пользователи - Календарь
Полная версия: линейный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hooligan
Надо элементы, расположенные между min и max переместить в начало массива, с одновременным их удалением. Подскажите пожалуйста, хотя бы алгоритм как их переместить
volvo
Hooligan
Цитата
с одновременным их удалением

С удалением чего?
mithquessir
volvo
Цитата
С удалением чего?

Наверное, элементов из (min,max).

Hooligan
Если так, то
Код

const
    n = 8;
    a:array[1..n] of integer = (5,-7,1,2,9,10,4,6);
var
    min,max,min_,max_,i,k,x,m,f:integer;
begin
    min := a[1]; min_ := 1;
    max := a[1]; max_ := 1;
    for i := 2 to n do
    begin
         if a[i] < min then
         begin min_ := i; min := a[i]; end;
         if a[i] > max then
         begin max_ := i; max := a[i]; end;
    end;
    for i := 1 to max_ - min_ -1 do
    begin
         x := a[min_+1];
         for k := min_+1 to max_-1{min_} do
         begin
              a[k] := a[k+1];
         end;
         for f := max_-1 to n do
         a[f] := a[f+1];
         inc(min_);
         for m := n downto 2 do
         a[m] := a[m-1];
         a[1] := x;
    end;
    for i := 1 to n do
    WriteLn(a[i]:3);
end.

Не самое рациональное решение, но, вроде, работает. ;)
volvo
mithquessir
При прогоне для массива (5,-7,1,2,9,10,4,6) программа должна выдавать только 6 значений - (5,1,2,9,4,6). А что она у тебя выдает?
Hooligan
мне самому такая вот мысль неожиданно пришла:
Код

if min_index<max_index then
 while min_index<>max_index-1 do
   begin
     m:=a[i];
     a[i]:=a[min_index+1];
     a[min_index+1]:=m;
     i:=i+1;
     min_index:=min_index+1;
   end
else
 while max_index<>min_index-1 do
   begin
     m:=a[i];
     a[i]:=a[max_index+1];
     a[max_index+1]:=m;
     i:=i+1;
     max_index:=max_index+1;
   end;
mithquessir
volvo
Цитата
При прогоне для массива (5,-7,1,2,9,10,4,6) программа должна выдавать только 6 значений - (5,1,2,9,4,6). А что она у тебя выдает?

Выдает 9,2,1,5,-7,10,4,6.
Цитата
Надо элементы, расположенные между min и max переместить в начало массива, с одновременным их удалением.

Ты не прав, нужно удалять не min,max элементы, а элементы между ними.
volvo
mithquessir
Это тебе кто сказал? Ты сам так решил? Прочти условие:
Цитата
Надо элементы, расположенные между min и max переместить в начало массива

Поэтому, пока автор темы не уточнит задание, его делать бессмысленно.
Бродяжник
...свою пару копеек...
Задачу понимаю так:
Есть массив (вектор) из N чисел. Среди этих чисел есть а) наименьшее, и б) наибольшее. В общем случае они находятся не рядышком, т.е. между ними есть другие числа. И вот эти-то другие числа надо перенести с того места, где они сейчас, в начало массива, сдвинув начальные элементы на освободившееся место. Пример:
Было: 4,3,2,1,0,1,2,3,100,99,98
Стало: 1,2,3,4,3,2,1,0,100,99,98
Тройку чисел 1,2,3 сместили в начало массива.
Так? Если так, тогда рассмотрим "подводные камни".
Кто скажет, как должна работать программа в следующих случаях:
а) 2,2,2,2,2,2,2,2,2
б) 1,2,3,1,2,3,1,2,3
в) 0,0,0,1,2,3,9,9,9
Если кто скажет, как, тогда можно предложить и алгоритм.
volvo
Бродяжник
Ты мой предыдущий пост читал? Ждем автора. Он лучше знает, как звучало условие... :yes:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.