Форум » Обработка числовых последовательностей » Требуется суровый приговор. » Ответить

Требуется суровый приговор.

Wally: Условие задачи: на вход программе подается: в первой строке - число N (1<N<10^9). В каждой из последующих N строк - по одному элементу последовательности - целые числа, не превышающее по модулю 10 000. Напишите программу, которая выводит на экран минимальное произведение двух элементов последовательности. Мой код: var a:array of integer; d,p,min,i,b:integer; BEGIN readln(b); SetLength(a,b); b:=b-1; for p:=0 to b do readln(a[p]); min:=a[0]*a[1]; for d:=0 to b do for i:=0 to b do if (d<>i) AND (min>a[d]*a[ i]) then min:=a[d]*a[ i]; write(min); END. Скажите, пожалуйста, эффективна ли эта программа хотя бы по памяти (или по времени). Спасибо.

Ответов - 7

Wally: Почему выводится только "a", хотя в коде стоит "a[ i ]"?

Поляков: Wally пишет: эффективна ли эта программа хотя бы по памяти (или по времени). Это решение на 2 балла. Программа неэффективна по памяти, потому что все данные предварительно считываются в массив. По времени также неэффективна, потому что двойной цикл по N, то есть количество операций пропорционально N2.

cabanov.alexey: Ну, в программе до кучи много синтаксических ошибок. Я так понимаю, вы хотите научиться решать на 4 балла? На самом деле, для этого в 27 задании нужно ответить на вопрос (с не всегда простым ответом). Какую информацию нужно выцепить из набора чисел для получения ответа? [Поправлено] В вашем примере нужно минимальное произведение. У нас числа могут быть с разными знаками, потому произведения могут быть как положительными, так и отрицательными. Для понятности представим 3 случая: 1) Попались только неотрицательные числа. Тогда берём два самых маленьких и перемножаем. 2) Попались только отрицательные (мб и 0) числа. Тогда берём два самых больших и перемножаем. 3) Попались числа с разными знаками. Берём самое большое (с +) и самое маленькое (с -) и перемножаем. Смотря на эти случаи можем сказать, что из всех чисел нам нужны только 2 наименьших положительных, 2 наибольших отрицательных и наибольший положительный с наименьшим отрицательным. Из них и выбираем наименьшее произведение (проверяя каждое на наличие).


Поляков: cabanov.alexey пишет: Так как числа только положительные В условии такого нет.

Wally: cabanov.alexey, 1) почему у меня в IDE ни одной синтаксической ошибки? 2) согласен с Вами. Мне нужно научиться отбирать нужную информацию. 3) напишу новый код, когда время будет, и выложу его на форум. P.S. 4) спасибо за напутствие.

Поляков: Wally пишет: 1) почему у меня в IDE ни одной синтаксической ошибки? Когда вы вводили код, редактор форума воспринял [ i ] как начало блока, выделенного курсивом. Поэтому было впечатление, что в программе несколько синтаксических ошибок. Сейчас я все поправил.

Wally: Константин Юрьевич, значит у меня в коде нет синтаксических ошибок?



полная версия страницы