Настоящий ученый должен уметь быстро перебирать в голове разные варианты решения задачи. Архимед для развития этого навыка использовал следующее упражнение: записывал трехназчное число и старался как можно быстрее получить из него все числа, какие можно, с помощью перестановки его цифр. Напишите программу, которая на основе трёхзначного числа находит все числа, образуемые путём перестановки цифр исходного числа. Формат входных данных Вводится целое число n (100≤n≤999). Формат выходных данных Требуется вывести искомые числа, каждое на новой строке. Примечания При поиске чисел-перестановок может так случиться, что некоторые числа будут повторяться. Например, из числа 344 можно получить 434 двумя способами — поменять местами первую и вторую цифры и поменять местами первую и третью цифры. В таких случаях допускается как выводить повторяющиеся числа несколько раз, так и вывести их лишь раз. Кроме того, во втором примере стоит обратить внимание на то, что ведущий 0 в числе 44 не отображается. В программе-решении требуется выводить «44», а не «044».
Помогите пожалуйста, программу надо сделать на питонне
Ответы
Решение
В питоне есть хороший модуль itertools. В нём есть комбинаторные функции - перестановки, размещения и куча других классных вещей. Давай вызовем itertools.permutations, передадим туда твоё число как строку и длину перестановок - 3:
permutations('123', 3) --> 123 132 213 231 312 321
permutations('100', 3) --> 100 100 10 1 10 1
Очередная перестановка, формально, представляется в виде списка. Переведём в строку: ''.join(i)
...И уберём ведущие нули: .lstrip('0')
Код
import itertools
for i in itertools.permutations(input(), 3):
print(''.join(i).lstrip('0'))
# Ввод:
# 100
# Вывод:
# 100
# 100
# 10
# 1
# 10
# 1
Условие задачи позволяет нам выводить повторяющиеся перестановки. Если нас это не устраивает, мы можем добавить проверку уникальности через set:
import itertools
checker = set()
for i in itertools.permutations(input(), 3):
s = ''.join(i).lstrip('0')
if not(s in checker):
print(s)
checker.add(s)
# Ввод:
# 100
# Вывод:
# 100
# 10
# 1