Показать сообщение отдельно
Старый 21.03.2017, 11:59   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Viewer Посмотреть сообщение
И все же непонятно - почему в массиве после сортировки ( в Вашем примере ) идет дублирование чисел?
Не идёт. Это у него показаны старый - новый массивы.
А вообще - забавная такая задачка. По-всякому решать можно. Ну вот, например, с использованием множеств (Alexey123, Вы уж простите великодушно, что программа написана на ЯП Free Pascal, т.е. на языке времён, как выяснилось, нашествия Батыя):
Код:
Type
 Ar=Array[0..255] of Byte;

Var
 A,B:Ar;
 S:Set of Byte;
 i,j,Jmax,N:Byte;

Function Num_max(C:Ar):Byte;
var
 Mx,k,k1,Nm:Byte;
begin
 k1:=0;
 Repeat
  if k1 in S then Inc(k1);
 Until Not(k1 in S);
 Mx:=C[k1];
 Nm:=k1;
 for k:=k1+1 to N do
  if (C[k]>Mx) and Not(k in S) then
   begin
    Mx:=C[k];
    Nm:=k;
   end;
 Num_max:=Nm;
end;

Begin
 Randomize;
 Write(' N = ');
 Readln(N);
 Writeln('Initial array:');
 for i:=0 to N do
  begin
   A[i]:=Random(100);
   write(A[i]:4);
  end;
 writeln;
 writeln;
 if (N mod 2)=0 then Jmax:=(N div 2)-1 else Jmax:=(N div 2);
 S:=[];
 j:=0;
 Repeat
  i:=Num_Max(A);
  B[j]:=A[i];
  S:=S+[i];
  i:=Num_Max(A);
  B[N-j]:=A[i];
  S:=S+[i];
  Inc(j);
 Until j=Jmax+1;

 if (N mod 2)=0 then
  for i:=0 to N do
   if Not(i in S) then B[(N div 2)]:=A[i];

 Writeln('Ordered array:');
 for i:=0 to N do write(B[i]:4);
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070