Истинный ученый обязан уметь скоро перебирать в голове разные варианты решения

Истинный ученый обязан уметь живо перебирать в голове различные варианты решения задачки. Архимед для развития этого навыка использовал последующее упражнение: записывал трехназчное число и старался как можно прытче получить из него все числа, какие можно, с помощью перестановки его цифр. Напишите программку, которая на основе трёхзначного числа обретает все числа, образуемые маршрутом перестановки цифр исходного числа. Формат входных данных Вводится целое число n (100n999). Формат выходных данных Нужно вывести разыскиваемые числа, каждое на новейшей строке. Примечания При поиске чисел-перестановок может так случиться, что некие числа будут повторяться. Например, из числа 344 можно получить 434 2-мя методами поменять местами первую и вторую числа и поменять местами первую и третью числа. В таких случаях допускается как выводить повторяющиеся числа несколько раз, так и вывести их лишь раз. Кроме того, во втором образце стоит направить внимание на то, что ведущий 0 в числе 44 не отображается. В программке-решении нужно выводить 44, а не 044.
Помогите пожалуйста, программку надо сделать на питонне

Задать свой вопрос
1 ответ

Решение

В питоне есть хороший модуль itertools. В нём есть комбинаторные функции - перестановки, размещения и куча иных потрясающих вещей. Давай вызовем itertools.permutations, передадим туда твоё число как строчку и длину перестановок - 3:

permutations('123', 3) --gt; 123 132 213 231 312 321

permutations('100', 3) --gt; 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

, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт