Написать программу, которая находит три самых больших элементов массива, и вместо них записывает их номера ячеек \ массив [1..5]

legoman1858 legoman1858    3   29.08.2019 14:00    0

Ответы
13573967 13573967  06.10.2020 03:00
Исходный массив: -3 -4 -1 -8 6
Max1 = A[5] = 6
Max2 = A[3] = -1
Max3 = A[1] = -3
Новый массив: 1 -4 3 -8 5Const
   N = 5;
Var
   A:array[1..N] of integer;
   i,Max1,Max2,Max3:integer;
Begin
Randomize;
Write('Исходный массив:');
For i:= 1 to N do
    Begin
    A[i]:=random(21)-10;
    Write(' ',A[i]);
    End;

Max1:=1;
For i:= 2 to N do
    if A[i]>A[Max1] then Max1:=i;

if Max1<>1 then Max2:=1
else Max2:=2;
For i:= 1 to N do
    if (A[i]>A[Max2])and(A[i]<=A[Max1])and(i<>Max1) then Max2:=i;

Max3:=1;
if (Max2=Max3)or(Max1=Max3) then Max3:=Max3+1;
if (Max2=Max3)or(Max1=Max3) then Max3:=Max3+1;
For i:= 1 to N do
    if (A[i]>A[Max3])and(A[i]<=A[Max2])and(i<>Max2) then Max3:=i;

WriteLn;
WriteLn('Max1 = A[',Max1,'] = ',A[Max1]);
WriteLn('Max2 = A[',Max2,'] = ',A[Max2]);
WriteLn('Max3 = A[',Max3,'] = ',A[Max3]);

A[Max1]:=Max1;
A[Max2]:=Max2;
A[Max3]:=Max3;
Write('Новый массив:');
For i:= 1 to N do
    Write(' ',A[i])
End.

Пример работы программы:

Исходный массив: -3 -4 -1 -8 6
Max1 = A[5] = 6
Max2 = A[3] = -1
Max3 = A[1] = -3
Новый массив: 1 -4 3 -8 5
ПОКАЗАТЬ ОТВЕТЫ
wEnD11 wEnD11  06.10.2020 03:00
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ArrRandom(5,-50,50); a.Println;
  var b:=a.Select((x,i)->(x,i)).OrderByDescending(xi->xi[0]).
      Select(xi->xi[1]).Take(3);
  foreach var i in b do a[i]:=i+1;
  a.Println;
end.

Пример
39 -22 -29 49 -18
1 -22 -29 4 5
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика