Аня, Боря и Вова решили съесть апельсин.
Подскажите ребятам, как им его разделить.
Разработайте программу, которая выводит все возможные способы разделки апельсина.
Формат ввода
В единственной строке записано количество долек апельсина (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().
Посмотреть код
Решение
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])
Решение
# решение предложенное читателем.
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}“)
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}”)
#задача комбинаторная, перебор в вашем решении излишен)
Спасибо за решение.
Ваше решение действительно лучше, оно соответствует второму решению, из первой версии задачи, когда мое демонстрирует подход, соотвествующий первому решению.
Я добавлю его в решения, если вы не возражаете.