Top.Mail.Ru
Ответы

Паскаль. В линейном массиве найти два максимальных элемента.

Дополнен

заполнение массива случайными числами

Дополнен

нужна программа, я одно максимальное число нашла, а как найти сразу два максимальных элемента???

По дате
По рейтингу
Аватар пользователя
Новичок
13лет

Самый простой вариант - сделать второй проход, запомнив индекс максимального элемента, который был установлен в предыдущем проходе. При втором проходе просто пропустить его, выполнив проверку (к примеру if not i=2 then if a(i) > max then max:=a(i) )

var
max1, ind, max2, i : integer;
a : array [1..100] of integer;
begin
randomize;
for i:=1 to 100 do
a(i) := random(200);
max1 := a(i);
for i:=2 to 100 do
if a(i) > max1 then begin max1 := a(i); ind = i; end;
max2 := a(i);
for i:=2 to 100 do
if (a(i) > max2) and (i <> ind) then max2 := a(i);
writeln('max1=', max1, ' max2=', max2);
end.

Примерно так. Писал по памяти, нет под рукой компилятора. (i) замените на квадратные скобки.

Аватар пользователя
Ученик
8лет

код С#
________
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] initArr = new int[10000];
for (int i = 0; i < initArr.Length; i++)
{
initArr[i] = rnd.Next(-1000, 1000);
}

var outArr = Sort(initArr, 10);
}

private static int[] Sort(int[] array, int count)
{
int[] outArr = new int[count];
for (int i = 0; i < outArr.Length; i++)
{
int[] sorted = new int[count];
for (int j = 0; j < array.Length; j++)
{
if (!sorted.Contains(array[j]) && array[j] == array.Max())
{
outArr[i] = array[j];
array[j] = 0;
}
}
}

return (int[]) outArr.Reverse();
}
}
}

Выбирает из массива А массив максимальных чисел Б. В массиве А числа могут повторяться и поэтмоу также считаются максимальными. Требует доработки, т. к. 5 элементов из 10000 массива выберет за 6 сек. А если надо будет выбрать 1000?? Прикрути linq и возможно будет тебе праздник, но не факт, скорее всего еще медленее станет работать

Аватар пользователя
Мастер
13лет

После того, как одно максимальное число найдено, ищите второе точно так же, но при этом сравнивайте с первым (его занести в отдельную переменную) . Т. е. оно должно получиться больше всех чисел в массиве, кроме первого числа.

Аватар пользователя
Ученик
13лет

нужен только алгоритм или прога? Тип переменных в массиве?

Аватар пользователя
Мастер
13лет

стучи в аську напишу бесплатно 387538869