Advertisement
Hasli4

Untitled

Mar 27th, 2025
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.68 KB | None | 0 0
  1. def generate_partitions(n, max_val=None, current_partition=None):
  2.     """
  3.    Рекурсивная функция генерации всех разложений числа n на слагаемые.
  4.    
  5.    Args:
  6.        n (int): Оставшаяся сумма для разложения
  7.        max_val (int, optional): Максимальное значение текущего слагаемого
  8.        current_partition (list, optional): Текущее частичное разложение
  9.    
  10.    Returns:
  11.        list: Список всех возможных разложений числа
  12.    """
  13.     # Инициализация начальных параметров
  14.     if max_val is None:
  15.         max_val = n
  16.     if current_partition is None:
  17.         current_partition = []
  18.    
  19.     # Базовый случай: если остаток равен 0, возвращаем текущее разложение
  20.     if n == 0:
  21.         return [current_partition]
  22.    
  23.     partitions = []
  24.    
  25.     # Перебираем возможные значения слагаемых от 1 до min(n, max_val)
  26.     for i in range(1, min(n, max_val) + 1):
  27.         # Рекурсивный вызов с уменьшением остатка и добавлением слагаемого
  28.         new_partitions = generate_partitions(
  29.             n - i,
  30.             i,  # Ограничиваем максимальное значение следующего слагаемого
  31.             current_partition + [i]
  32.         )
  33.         partitions.extend(new_partitions)
  34.    
  35.     return partitions
  36.  
  37. def write_partitions_to_file(n, filename='partitions.txt'):
  38.     """
  39.    Генерация и запись разложений числа в файл.
  40.    
  41.    Args:
  42.        n (int): Число для разложения
  43.        filename (str, optional): Имя файла для вывода
  44.    """
  45.     # Получаем все разложения
  46.     partitions = generate_partitions(n)
  47.    
  48.     # Сортируем разложения в обратном лексикографическом порядке
  49.     partitions.sort(reverse=True)
  50.    
  51.     # Преобразуем разложения в строковый формат
  52.     partition_strings = [
  53.         '+'.join(map(str, partition))
  54.         for partition in partitions
  55.     ]
  56.    
  57.     # Запись в файл
  58.     with open(filename, 'w') as f:
  59.         for partition in partition_strings:
  60.             f.write(partition + '\n')
  61.    
  62.     print(f"Разложения числа {n} записаны в файл {filename}")
  63.  
  64. # Пример использования
  65. n = 4
  66. write_partitions_to_file(n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement