Максимальное произведение
Хочу предложить на Ваше рассмотрение такую задачку: дано натуральное число N, нужно найти такое максимальное произведение натуральных чисел, не превышающих N, чтобы сумма множителей была равна N.
Например, если N = 12, то ответом будет 3*4*5 = 60.
Как бы сие чудо реализовать на паскале?
берешь число и раскладываешь его по 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
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
1. число n раскладываешь на 2-ки и если надо единицу(если нечетное)
Код:
n=12 - четное
2 2 2 2 2 2
n= 11 - нечетное
2 2 2 2 2 1
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. ничего сложного нет, зависит от желания разобраться.
счас буду пробовать..
не совсем корректно работает алгоритм :(
прийдётся либо раскладывать число на составляющие, которые меньше N/2, либо писать что-то другое..
так, например, если разложить то же число 12 не по 2, а по 3, то получится, что максимум будет выглядеть вот так: 3*3*3*3 = 81
ага вижу
Цитата: sherry
Доброго времени суток!
Хочу предложить на Ваше рассмотрение такую задачку: дано натуральное число N, нужно найти такое максимальное произведение натуральных чисел, не превышающих N, чтобы сумма множителей была равна N.
Например, если N = 12, то ответом будет 3*4*5 = 60.
Как бы сие чудо реализовать на паскале?
Хочу предложить на Ваше рассмотрение такую задачку: дано натуральное число N, нужно найти такое максимальное произведение натуральных чисел, не превышающих N, чтобы сумма множителей была равна N.
Например, если N = 12, то ответом будет 3*4*5 = 60.
Как бы сие чудо реализовать на паскале?
а почему не 4*4*4 = 64?
либо 3*3*3*3 = 81?
почему говорю так??
попробуй разложить число на простые множители
имеется прога под сотку
за респект могу отослать
Цитата: David_K800i
а почему не 4*4*4 = 64?
либо 3*3*3*3 = 81?
Вы явно не читали историю сообщений :cool:
Цитата: David_K800i
имеется прога
за респект могу отослать
Понимаете, дело не в программе. Да и EXE-шник мне ни к чему. Мне дали задачу из курсовой работы. Звучит по-другому, и там есть ещё пара мелких приколов (если интересно, полный текст задачи можно прочесть здесь - задача называется "Драконы"). Я выделил главный момент задачи и пытался с ним разобраться. Не найдя выхода - я попросил помощи на форуме. За это время человек сказал, что заплатил за курсовую и задача ему ни к чему. Я увлекаюсь программированием и мне чисто для себя интересно "добить" сию задачу. Вот так ;)