UniLecs #130. Разбиение числа

UniLecs #130. Разбиение числа

UniLecs

Задача: давайте вспомним одну из популярных задач на вывод всех разбиений числа N.

Разбиения числа N на слагаемые — это набор целых положительных чисел, сумма которых равна N. При этом разбиения, отличающиеся лишь порядком слагаемых, считаются одинаковыми.

Необходимо вывести всевозможные разбиения N. 

Условие: слагаемые в разбиениях должны идти в убывающем порядке.

Входные данные: N - натуральное число от 1 до 30.

Вывод: всевозможные разбиения числа N

Пример: N = 3

Answer: 

1 + 1 + 1

2 + 1

3

Идея: воспользуемся рекурсией для упрощения, т.е. для разбивки числа N = n1 + n2 + ... nk (плюс учитываем условие про убывающие слагаемые) берем первое слагаемое n1 и теперь нам нужно разбить число N - n1, для ктр слагаемые будут меньше n1. Детали реализации смотрите в коде.

Реализация:

C#

https://gist.github.com/unilecs/d0d61eef6fdf8e04e93989a41935c101

Test:

https://dotnetfiddle.net/lK3S0z

Report Page