Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def generate_partitions(n, max_val=None, current_partition=None):
- """
- Рекурсивная функция генерации всех разложений числа n на слагаемые.
- Args:
- n (int): Оставшаяся сумма для разложения
- max_val (int, optional): Максимальное значение текущего слагаемого
- current_partition (list, optional): Текущее частичное разложение
- Returns:
- list: Список всех возможных разложений числа
- """
- # Инициализация начальных параметров
- if max_val is None:
- max_val = n
- if current_partition is None:
- current_partition = []
- # Базовый случай: если остаток равен 0, возвращаем текущее разложение
- if n == 0:
- return [current_partition]
- partitions = []
- # Перебираем возможные значения слагаемых от 1 до min(n, max_val)
- for i in range(1, min(n, max_val) + 1):
- # Рекурсивный вызов с уменьшением остатка и добавлением слагаемого
- new_partitions = generate_partitions(
- n - i,
- i, # Ограничиваем максимальное значение следующего слагаемого
- current_partition + [i]
- )
- partitions.extend(new_partitions)
- return partitions
- def write_partitions_to_file(n, filename='partitions.txt'):
- """
- Генерация и запись разложений числа в файл.
- Args:
- n (int): Число для разложения
- filename (str, optional): Имя файла для вывода
- """
- # Получаем все разложения
- partitions = generate_partitions(n)
- # Сортируем разложения в обратном лексикографическом порядке
- partitions.sort(reverse=True)
- # Преобразуем разложения в строковый формат
- partition_strings = [
- '+'.join(map(str, partition))
- for partition in partitions
- ]
- # Запись в файл
- with open(filename, 'w') as f:
- for partition in partition_strings:
- f.write(partition + '\n')
- print(f"Разложения числа {n} записаны в файл {filename}")
- # Пример использования
- n = 4
- write_partitions_to_file(n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement