J. Мы делили апельсин 2.0

Аня, Боря и Вова решили съесть апельсин.
Подскажите ребятам, как им его разделить.

Разработайте программу, которая выводит все возможные способы разделки апельсина.

Формат ввода

В единственной строке записано количество долек апельсина (N).

Формат вывода

Таблица вариантов разделения апельсина.

Примечание

  • Каждому ребёнку должна достаться хотя бы одна долька апельсина.
  • Ни одной дольки не должно остаться.
  • Выводить варианты в порядке увеличения количества долек у Ани, следом Бори и затем Вовы.

Для удобства сведите задачу к разделению долек между двумя ребятами, а третьему отдайте остатки.

Пример

Ввод

3

Вывод

А Б В
1 1 1

Ввод

5

Вывод

А Б В
1 1 3
1 2 2
1 3 1
2 1 2
2 2 1
3 1 1

Решение

Одним из вариантов может быть генерация всех возможных комбинаций деления апельсина без оглядки на общее количество долек. В дальнейшем при выводе мы проверяем совпадает ли сумма всех долек варианта с заданной и если это так, то выводим подошедший нам вариант. Варианты мы будем накапливать в список при помощи product().

Второй вариант, реализующий один из подходов из первой части задачи, предложенный читателем предполагает генерацию уникальных пар и вычисление третьего числа исходя из суммы пары и общей суммы долек. Для этого стоит воспользоваться combinations().

Посмотреть код

Решение

Python
from itertools import product

num = int(input())
nums = range(1, num - 1)
table = list(product(nums, repeat=3))

print('А Б В')
for i in range(len(table)):
    if sum(table[i]) == num:
        print(*table[i])

Решение

Python
# решение предложенное читателем.

from itertools import combinations

count = int(input())
nums = range(1, count)
print(‘А Б В’)
for i, j in list(combinations(nums, 2)):
print(f“{i} {j – i} {count – j}“)
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
mka
mka
20.04.2024 17:50

from itertools import combinations

count = int(input())
nums = range(1, count)
print(‘А Б В’)
for i, j in list(combinations(nums, 2)):
print(f”{i} {j – i} {count – j}”)
#задача комбинаторная, перебор в вашем решении излишен)