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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2016, 11:55   #11
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Ограничения на входные данные какие?
Только одно: 4 <= n <= 1000
nobody_nohead вне форума Ответить с цитированием
Старый 01.12.2016, 12:09   #12
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

можно вставлять только +* или *+ так получается?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 01.12.2016, 12:33   #13
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
можно вставлять только +* или *+ так получается?
Между числами нужно вставить 2 знака умножения и все остальное - знаки сложения. Если вы это имели ввиду. Два знака умножить могут идти друг после друга, если в итоге результат будет наибольшим. Т.е например 10*2*3+5+4 имеет место быть, т.к в итоге получим 69.
nobody_nohead вне форума Ответить с цитированием
Старый 01.12.2016, 13:28   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

задачу с перебором я решал тут - Арифметические действия с цифрами числа

для больших N (а N=1000 - это достаточно большое количество) полный перебор будет достаточно долгим,
но, не в данном случае, в связи с тем, что нужно только позиции умножения перебирать, то это всего 999*998 вариантов, то это вполне приемлемо!


есть резон и в подходе ViktorR - найти индексы 4-х максимальных значений
и проверить (с учётом граничных значений, конечно!!!) что больше
m[max1]*m[max2] ..... + + m[max3]*m[max4]
или
m[max1-1]*m[max1]*m[max2] + + +
или
m[max1]*m[max1]*m[max2+1] + +
или
m[max3-1]*m[max2]*m[max4] + +
или
m[max3]*m[max4]*m[max4+1] + +

это всего 5 вариантов.

какой Вам способ нравится больше?

но, в любом случае - задачка не очень сложная.

я бы написал функцию Calculate(MyArray, indexMultyply1, indexMultyply2) : longint,
которая возвращает результат, если знаки умножения стоят в позициях indexMultyply1 и indexMultyply2 соответственно.
Надеюсь, это не затруднит?


Цитата:
Сообщение от nobody_nohead Посмотреть сообщение
Т.е например 10*2*3+5+4 имеет место быть, т.к в итоге получим 69.
а если поставить знаки так: 10+2+3*5*4
получается 72


--

Последний раз редактировалось Serge_Bliznykov; 01.12.2016 в 13:33.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 13:52   #15
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Умножение двух отрицательных чисел будет положительно.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 01.12.2016, 14:02   #16
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение


а если поставить знаки так: 10+2+3*5*4
получается 72


--
Невнимательность))
После написания функции рациональным я так думаю будет сделать так:
Код:
result:= -1;
for i to n do
    for j to (n-1) do
        if Calculate(MyArray, i, j) > result then
            result:= Calcualte(MyArray, i, j);
Если что-то не так, поправьте, пожалуйста.
nobody_nohead вне форума Ответить с цитированием
Старый 01.12.2016, 14:29   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Умножение двух отрицательных чисел будет положительно.
да, точно.
задача близка к "Дано N-целых чисел.Требуется выбрать из них три таких числа, произведение которых максимально." (на форуме - тыц, тыц, тыц)


Цитата:
Сообщение от nobody_nohead Посмотреть сообщение
После написания функции рациональным я так думаю будет сделать так:
не совсем.
первое. результат может быть отрицательным.
ну, например, расставьте знаки среди чисел: -17 1 1 1 -7
поэтому брать result -1 нельзя. надо maxResult := Calculate(MyArray, 1, 2);

ну дальше по мелочи - вычислять Calculate надо в цикле один раз (сохранять во временную переменную),
нужно сохранять не только максимальное значение, но и позиции знака умножения, при которых этот максимум был получен,
позиций для знаков на одну меньше, чем чисел, поэтому
первый цикл по позициям крутить от for i:=1 до n-2 , внутренний цикл крутить от for j:=i+1 to n-1

но в целом, да, согласен, Вы правильно поняли мою мысль.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 16:21   #18
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Большое спасибо, теперь стало ясно.
nobody_nohead вне форума Ответить с цитированием
Старый 01.12.2016, 16:45   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста.

функцию самостоятельно Calculate напишете? сюда готовый код выложите?
имхо, неплохо, если в теме останется готовое решение, которое может пригодиться кому-то...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 17:24   #20
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пожалуйста.

функцию самостоятельно Calculate напишете? сюда готовый код выложите?
имхо, неплохо, если в теме останется готовое решение, которое может пригодиться кому-то...
Да, сейчас займусь реализацией. Если получится - конечно выложу.
nobody_nohead вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal ExCiTeC Паскаль, Turbo Pascal, PascalABC.NET 0 28.01.2013 20:36
Turbo Pascal задача Инокентий09 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2012 11:36
Задача в Turbo Pascal Cooltik Паскаль, Turbo Pascal, PascalABC.NET 10 28.04.2012 19:24
Задача на Turbo Pascal spezzA Фриланс 3 06.04.2011 23:13