Разминка для мозгов: разбиение натурального числа на 3 слагаемых
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Продолжаем рубрику Разминка для мозгов. Очередная задачка ))
Для заданного натурального числа N вывести на консоль таблицу всех различных разложений этого числа на три натуральных слагаемых (разложения, отличающиеся порядком слагаемых, различными не считаются).
Для справки: в данной задаче под натуральным числом подразумевается число из расширенного натурального ряда: целое неотрицательное число, включая 0.
Постарайтесь выбрать оптимальный алгоритм решения задачи.
Я тут придумал очевидный алгоритм:
Для каждого i от 1 до (n — 1) выводим i и все разложения числа (n — i) на два слагаемых (таких (n — i) / 2).
И, соответственно, реализация:
Но алгоритм медленный ( O(f) = (n — 2) * (n / 2) ), ведь так?
P.S.:
Разве натуральные не начинаются с 1?
Нуль (пустое множество) иногда относят к натуральным числам. Но в нашем случае учитывать нулевое слагаемое нет никакого смысла.
Не согласен.
Во-первых, если 0 не учитывать, то разложить на три слагаемых натуральные числа 1 и 2 не получится.
Во-вторых, 0, как слагаемое, даёт больше вариантов разложения числа. Например, для 3 получаем:
А в противном случае — всего один вариант.
В-третьих, читаем в Википедии вводную часть статьи (до Содержания). Если уж формулировать задачу совсем чётко, давайте говорить не о натуральных числах, а о числах расширенного натурального ряда, имея ввиду и исходное число, и полученные слагаемые.
А вообще-то я не понимаю, откуда возникла дискуссия. В формулировке задачи я оговорил что подразумевается под «натуральным числом».
UPD: Для буквоедов, внёс уточнение в условие задачи.
porshe, нестыковочка:
Первый и четвёртый варианты, а также второй и третий отличаются только порядком слагаемых.
И вариантов с нулевым слагаемым нет.
Я думаю это может быть представлено так:
На мой взгляд у beginner получилось хорошее решение.
Единственно, хотелось бы уточнить два момента:
Итого: