Автор | Сообщение |
|
Отправлено: 04.04.19 16:54. Заголовок: Требуется суровый приговор.
Условие задачи: на вход программе подается: в первой строке - число 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
[только новые]
|
|
|
Отправлено: 04.04.19 16:56. Заголовок: Почему выводится тол..
Почему выводится только "a", хотя в коде стоит "a[ i ]"?
|
|
|
|
| Администратор
|
Сообщение: 1863
|
|
Отправлено: 04.04.19 17:02. Заголовок: Wally пишет: эффекти..
Wally пишет: цитата: | эффективна ли эта программа хотя бы по памяти (или по времени). |
|
Это решение на 2 балла. Программа неэффективна по памяти, потому что все данные предварительно считываются в массив. По времени также неэффективна, потому что двойной цикл по N, то есть количество операций пропорционально N 2.
|
|
|
|
Отправлено: 04.04.19 18:24. Заголовок: Ну, в программе до к..
Ну, в программе до кучи много синтаксических ошибок. Я так понимаю, вы хотите научиться решать на 4 балла? На самом деле, для этого в 27 задании нужно ответить на вопрос (с не всегда простым ответом). Какую информацию нужно выцепить из набора чисел для получения ответа? [Поправлено] В вашем примере нужно минимальное произведение. У нас числа могут быть с разными знаками, потому произведения могут быть как положительными, так и отрицательными. Для понятности представим 3 случая: 1) Попались только неотрицательные числа. Тогда берём два самых маленьких и перемножаем. 2) Попались только отрицательные (мб и 0) числа. Тогда берём два самых больших и перемножаем. 3) Попались числа с разными знаками. Берём самое большое (с +) и самое маленькое (с -) и перемножаем. Смотря на эти случаи можем сказать, что из всех чисел нам нужны только 2 наименьших положительных, 2 наибольших отрицательных и наибольший положительный с наименьшим отрицательным. Из них и выбираем наименьшее произведение (проверяя каждое на наличие).
|
|
|
|
| Администратор
|
Сообщение: 1864
|
|
Отправлено: 04.04.19 18:50. Заголовок: cabanov.alexey пишет..
cabanov.alexey пишет: цитата: | Так как числа только положительные |
|
В условии такого нет.
|
|
|
|
Отправлено: 11.04.19 08:42. Заголовок: cabanov.alexey, 1) ..
cabanov.alexey, 1) почему у меня в IDE ни одной синтаксической ошибки? 2) согласен с Вами. Мне нужно научиться отбирать нужную информацию. 3) напишу новый код, когда время будет, и выложу его на форум. P.S. 4) спасибо за напутствие.
|
|
|
|
| Администратор
|
Сообщение: 1873
|
|
Отправлено: 11.04.19 08:58. Заголовок: Wally пишет: 1) поче..
Wally пишет: цитата: | 1) почему у меня в IDE ни одной синтаксической ошибки? |
|
Когда вы вводили код, редактор форума воспринял [ i ] как начало блока, выделенного курсивом. Поэтому было впечатление, что в программе несколько синтаксических ошибок. Сейчас я все поправил.
|
|
|
|
Отправлено: 11.04.19 09:04. Заголовок: Константин Юрьевич, ..
Константин Юрьевич, значит у меня в коде нет синтаксических ошибок?
|
|
|
|