Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

П. Н. П. Профи (651), закрыт 13 лет назад
Дополнен 13 лет назад
заполнение массива случайными числами
Дополнен 13 лет назад
нужна программа, я одно максимальное число нашла, а как найти сразу два максимальных элемента???
Лучший ответ
Руслан Синкевич Профи (787) 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) замените на квадратные скобки.
Остальные ответы
Koshachek Мастер (1818) 13 лет назад
стучи в аську напишу бесплатно 387538869
sedfo00616 sedfo00616 Ученик (192) 13 лет назад
нужен только алгоритм или прога? Тип переменных в массиве?
dosmot dosmot Мастер (1759) 13 лет назад
После того, как одно максимальное число найдено, ищите второе точно так же, но при этом сравнивайте с первым (его занести в отдельную переменную) . Т. е. оно должно получиться больше всех чисел в массиве, кроме первого числа.
****** ****** Ученик (199) 7 лет назад
код С#
________
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 и возможно будет тебе праздник, но не факт, скорее всего еще медленее станет работать
Похожие вопросы