Ответы пользователя по тегу Алгоритмы
  • Как разбить число?

    @MaximKAI
    /// <param name="remain">Оставшаяся часть нашего числа</param>
    /// <param name="maxTerm">Максимальный размер слагаемого</param>
    /// <param name="terms">Список слагаемых</param>
    static void Solve(int remain, int maxTerm, List<int> terms)
    {
        //Если от числа ничего не осталось, выводим все слагаемые и выходим из функции
        if (remain == 0)
        {
            Console.WriteLine(string.Join(" + ", terms));
            return;
        }
    
        //Перебираем возможные слагаемые от наибольшего до 1
        for (int term = maxTerm; term >= 1; term--)
        {
            if (term <= remain)
            {
                terms.Add(term);
                Solve(remain - term, term, terms);
                terms.Remove(term);
            }
        }
    }


    Вызываем метод:
    var partitions = new List<int>();
    Solve(n, n, partitions); //n - число для которого нужно найти разбиения
    Ответ написан
    Комментировать