Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2013, 13:01   #1
ANTON255200
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 15
Сообщение Найти три максимальных элемента последовательности (Паскаль)

Вводится последовательность целых чисел, 0-конец ввода. Выдать три максимальных числа в этой последовательности, игнорируя дубликаты (числа в ответе должны быть различны). Заранее спасибо
ANTON255200 вне форума Ответить с цитированием
Старый 31.12.2013, 19:45   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

То есть в последовательности например
1 2 3 4 3 4 5 6 6 0
Ожидается ответ 6 5 4?

Последовательность чисел откуда берется?
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 01.01.2014, 11:59   #3
ANTON255200
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Ожидается ответ 6 5 4?
Да, именно такой. Последовательность вводится с клавиатуры
ANTON255200 вне форума Ответить с цитированием
Старый 01.01.2014, 12:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предположу:
Код:
var a:array[0..3] of integer; first:boolean;
begin first:=true;
 repeat
  readln(a[0]);
  if first or (a[2]>a[3]) then a[3]:=a[2];
   if first or (a[1]>a[2]) then a[2]:=a[1];
    if first or (a[0]>a[1]) then a[1]:=a[0];
  first:=false;
 until a[0]=0;
 write(a[1]:5,a[2]:5,a[3]:5);
 readln;
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.01.2014, 12:22   #5
ANTON255200
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 15
По умолчанию

Не работает. Выдает три одинаковых числа
ANTON255200 вне форума Ответить с цитированием
Старый 01.01.2014, 12:28   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Код:
takeMax n = take n . reverse . sort . nub
Берет 3 максимальных элемента из списка
Код:
print $ takeMax 3 [4,5,1,6,8,8,4,4,5,7,10,6]
Выведет:
[10,8,7]

PS: nub - O(n^2). The nub function removes duplicate elements from a list.
Поэтому если скорость не главное, то сгодится и такое решение =)

Сортируйте массив в обратном порядке(например пузырьком). Выкиньте из него повторяющиеся элементы. Потом возьмите 3 первые элемента.

Последний раз редактировалось Kostia; 01.01.2014 в 14:18.
Kostia вне форума Ответить с цитированием
Старый 01.01.2014, 13:02   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Сортируйте массив в обратном порядке(например пузырьком). Выкиньте из него повторяющиеся элементы. Потом возьмите 3 первые элемента.
1) Фи...
2) Хорошо, получили 1 1 2 2 3 3..
Код:
m1 := -MaxInt+2;
m2 := -MaxInt+1;
m3 := -MaxInt;

for i := 1 to n do begin
	if (a[i] = m1) or (a[i] = m2) or (a[i] = m3) then Continue;
    if a[i] > m1 then begin
           m3 := m2;
           m2 := m1;
           m1 := a[i]
   end
   else   if a[i] > m2 then begin
       m3 := m2; 
       m2 := a[i]
  end
   else
            if a[i] > m3 then
              m3 := a[i]
end;
Я бы делал так..
Poma][a вне форума Ответить с цитированием
Старый 01.01.2014, 13:09   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Выкиньте из него повторяющиеся элементы
зачем???
в задании ж не написано 3 различных
поэтому в последовательности
Цитата:
1 1 2 2 3 3..
как раз и будет 3 максимума
Цитата:
2 3 3
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 01.01.2014, 13:48   #9
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Цитата:
зачем???
Задание звучало как:
Цитата:
Выдать три максимальных числа в этой последовательности, игнорируя дубликаты (числа в ответе должны быть различны)
В случае не выполнения условия([2,2,3,3,2]), можно вывести что-то типа: "Увы, но в последовательность только 2 различных максимальных элемента: 2, 3"

Последний раз редактировалось Kostia; 01.01.2014 в 13:53.
Kostia вне форума Ответить с цитированием
Старый 01.01.2014, 13:52   #10
ANTON255200
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 15
По умолчанию

Гарантируется, что в последовательности есть как минимум 3 различных числа
ANTON255200 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
даны три матрицы,найти наибольшее значение элемента! Елешечка Паскаль, Turbo Pascal, PascalABC.NET 1 04.12.2013 08:55
найти два максимальных элемента в массиве Sylar9 Общие вопросы C/C++ 5 27.05.2012 14:18
Две лабы: файл - обработать слова; массив - найти три наибольших элемента за один проход ( Delphi ) Emma_Imp Помощь студентам 5 26.12.2010 21:13
найти наименьший номер элемента последовательности, для которого выполняется условие newgener Помощь студентам 3 24.05.2010 18:44
Паскаль-Найти сумму максимальных элементов строк матрицы tanyhaftv Помощь студентам 9 24.03.2010 16:03