Олимпиадная информатика - 2010

Разбор и решение задач муниципального уровня 2010-11 года

Задача «Наибольшее произведение»

Дано N целых чисел. Требуется выбрать из них три таких числа, произведение которых максимально.

Входные данные

Во входном файле INPUT.TXT записано сначала число N - количество чисел в последовательности (3<N<106). Далее записана сама последовательность: N целых чисел, по модулю не превышающих 1000.

Выходные данные

В выходной файл OUTPUT.TXT выведите значение наибольшего произведения искомых трех чисел.

Например

INPUT.TXT
9
3 5 1 7909-3 10

OUTPUT.TXT
810

INPUT.TXT
3
-50 -300-120

OUTPUT.TXT
-1800000

посмотреть текст программы здесь

Разбор задачи №7"Наибольшее произведение"

алгоритм предложен Мифтаховым Фуатом Раифовичем, МОУ «Бурбашская средняя общеобразовательная школа» Балтасинского муниципального района РТ

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

Наибольший результат можно получить если умножить два наименьших (если они отрицательны) и наибольшее число или если умножить три наибольших числа.

Наибольшее произведение и будет ответом к задаче. (Если вы пользуетесь Turbo Paskal 7, лучше назначить все переменные типа Longint. Проблем будет меньше, потому что если в правой части выражения все переменные типа Integer, то результат получится тоже такого типа, хоть вы и назначили ему другой тип)

------------------------------------------------------------------------

Можно пойти и другим путем. В условии задачи сказано, что значения элементов последовательности не превышают по модулю 1000.

Поэтому можно обьявить массив размерности от -1000 до +1000 и считать лишь количество элементов.

Но затем все же придется найти два наименьших и три наибольших числа.

Hosted by uCoz