Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Максимальное произведение

431
01 июня 2008 года
sherry
207 / / 16.10.2006
Доброго времени суток!
Хочу предложить на Ваше рассмотрение такую задачку: дано натуральное число N, нужно найти такое максимальное произведение натуральных чисел, не превышающих N, чтобы сумма множителей была равна N.
Например, если N = 12, то ответом будет 3*4*5 = 60.

Как бы сие чудо реализовать на паскале?
257
01 июня 2008 года
kosfiz
1.6K / / 18.09.2005
могу ошибаться, но попробовать можно так:
берешь число и раскладываешь его по 1, считаешь произведение, запоминаешь, потом последнее число раскидываешь на столько насколько возможно чисел начиная с конца и опять считаешь произведение и так до тех пор пока не будет одно всего число n. раскладывать лучше не по 1, а по 2 и если что 1 доставить в конец. лучше думаю понять будет на примере:
Код:
n=12
2 2 2 2 2 2 - 64
2 2 2 3 3  - 72
2 3 3 4 - 72
3 4 4 1 - 48
3 4 5 - 60
4 5 3 - 60
5 6 1 - 30
5 7 - 35
6 6 - 36
7 5 - 35
8 4 - 32
9 3 - 27
10 2 - 20
11 1 - 11
12 - 12

n=7
2 2 2 1 - 8
2 2 3 - 12
3 3 1 - 9
3 4 - 12
4 3 - 12
5 2 -10
6 1 - 6
7 - 7
431
01 июня 2008 года
sherry
207 / / 16.10.2006
не совсем понятно..

Цитата: kosfiz
считаешь произведение, запоминаешь, потом последнее число


какое число? в разложении последнее или произведение?

Цитата: kosfiz
раскидываешь на столько насколько возможно чисел начиная с конца


вообще тёмный лес.. :o

257
01 июня 2008 года
kosfiz
1.6K / / 18.09.2005
ты пример-то смотри.
1. число n раскладываешь на 2-ки и если надо единицу(если нечетное)
 
Код:
n=12 - четное
2 2 2 2 2 2
n= 11 - нечетное
2 2 2 2 2 1

считаешь произведение чисел.
2. начинаешь раскидывать последнее число в разложении(выделено жирным) по остальным, начиная с предпоследнего(выделено курсивом), т.е. вычитаешь из последнего 1 и добавляешь её предпоследнему, потом вычитаешь еще 1 и добавляешь её уже предпредпоследнему и т.д. пока последнее число(жирным выделено) не станет равным 0 или не добавишь по 1 всем числам стоящим впереди раскладываемого числа.
3. подсчитываешь произведение полученных цифр и при необходимости сравниваешь с ранее найденным, что определить максимальное ли или нет.
4. пока чисел больше 1 снова шаг 2, только последнее и предпоследнее числа сдвинуться влево на 1 позицию.

P.S. ничего сложного нет, зависит от желания разобраться.
431
01 июня 2008 года
sherry
207 / / 16.10.2006
Всё, понял. Спасибо!
счас буду пробовать..
431
02 июня 2008 года
sherry
207 / / 16.10.2006
kosfiz
не совсем корректно работает алгоритм :(
прийдётся либо раскладывать число на составляющие, которые меньше N/2, либо писать что-то другое..
так, например, если разложить то же число 12 не по 2, а по 3, то получится, что максимум будет выглядеть вот так: 3*3*3*3 = 81
257
02 июня 2008 года
kosfiz
1.6K / / 18.09.2005
ага вижу
27K
03 июня 2008 года
David_K800i
36 / / 27.05.2008
Цитата: sherry
Доброго времени суток!
Хочу предложить на Ваше рассмотрение такую задачку: дано натуральное число N, нужно найти такое максимальное произведение натуральных чисел, не превышающих N, чтобы сумма множителей была равна N.
Например, если N = 12, то ответом будет 3*4*5 = 60.

Как бы сие чудо реализовать на паскале?



а почему не 4*4*4 = 64?
либо 3*3*3*3 = 81?

почему говорю так??
попробуй разложить число на простые множители
имеется прога под сотку
за респект могу отослать

431
03 июня 2008 года
sherry
207 / / 16.10.2006
Цитата: David_K800i

а почему не 4*4*4 = 64?
либо 3*3*3*3 = 81?


Вы явно не читали историю сообщений :cool:

Цитата: David_K800i

имеется прога
за респект могу отослать



Понимаете, дело не в программе. Да и EXE-шник мне ни к чему. Мне дали задачу из курсовой работы. Звучит по-другому, и там есть ещё пара мелких приколов (если интересно, полный текст задачи можно прочесть здесь - задача называется "Драконы"). Я выделил главный момент задачи и пытался с ним разобраться. Не найдя выхода - я попросил помощи на форуме. За это время человек сказал, что заплатил за курсовую и задача ему ни к чему. Я увлекаюсь программированием и мне чисто для себя интересно "добить" сию задачу. Вот так ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог