Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 2 / 1
Регистрация: 12.10.2019
Сообщений: 42

Метод Перестановки

15.12.2021, 18:04. Показов 2557. Ответов 9

Студворк — интернет-сервис помощи студентам
Добрый день! Хочу попросить помощи. Я пишу программу, котрая должна выводить перестановки без повторений.
На входе есть число N - это количество переменных и соответственно N! -всего перестановок существует.
Мне нужно что бы программа вывела перестановку, котрую я у нее запрошу.

На входе будут два числа на одном ряду. N и K -где N- соответственно количество переменных K- это число перестановки, котрую надо вывести.
Число K получается в интервале от [1, N!]
Python
1
2
3
4
5
6
7
8
9
import itertools
 
N=int(input())
i=1
A=[i for i in range(1, N+1)]
A=''.join(str(x) for x in A)
print(A)
for i in itertools.permutations(A, N):
    print(' '.join(i))
как пример
на входе числа: 3 5
вывод: 3 1 2

то есть пермутации вышли такими
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

и нам нужна пятая.
спасибо за помощь)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2021, 18:04
Ответы с готовыми решениями:

Метод простой перестановки
Набросал такой код. Ошибки появляются после ввода. Программа должна получать на вход текст для шифровки и цифровой ключ(цифра или...

Метод перестановки
Помогите реализовать данный метод! Открытый текст: "ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ". Матрица из четырех столбцов: Ключи: k1...

Метод перестановки
Доброго времени суток. Помогите расшифровать текст: б аб нйеий ян яоннолесзясон есоонтонзянвгаогеж и оадин мбёклргзм аейозивжл ...

9
enx
 Аватар для enx
1190 / 766 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
15.12.2021, 18:09
Python
1
2
3
4
from itertools import permutations
 
a = permutations(range(20), 3)
print(*(next(a) for i in range(5)))

Добавлено через 48 секунд
Но если по делу, тебе поможет Нарайана.
0
3 / 2 / 1
Регистрация: 12.10.2019
Сообщений: 42
15.12.2021, 18:17  [ТС]
это вообще не то, что треовалось
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
15.12.2021, 18:40
Если я правильно понял.
Python
1
2
3
4
5
6
7
8
9
10
11
import itertools
 
N, K = map(int, input().split())
 
A = [i for i in range(1, N + 1)]
A = ''.join(str(x) for x in A)
print(A)
for i, el in enumerate(itertools.permutations(A, N), 1):
    if i == K:
        print(' '.join(el))
        break
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
15.12.2021, 19:28
ему нужна перестановка по номеру.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
15.12.2021, 19:49
Цитата Сообщение от eaa Посмотреть сообщение
ему нужна перестановка по номеру.
Тогда это сложно для меня.

Но вот тут вроде что-то есть
https://qna.habr.com/q/1085550
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
15.12.2021, 20:42
Лучший ответ Сообщение было отмечено Darlin как решение

Решение

писал пару месяцев назад
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from itertools import accumulate
from operator import mul
 
n = int(input())
k = int(input()) - 1
*f, = accumulate(range(1, n), func=mul, initial=1)
res = []
*p, = range(n)
for i in f[::-1]:
    j, k = divmod(k, i)
    res.append(p[j])
    p.remove(p[j])
print(*(x + 1 for x in res))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
15.12.2021, 20:54
Darlin, У меня в этом коде сожрет 43мб а лимит 16мб что надо сократить чтобы не сожрал много
1
3 / 2 / 1
Регистрация: 12.10.2019
Сообщений: 42
16.12.2021, 02:09  [ТС]
Спасибо) Только вот не доконца поняла, что конкретно делает *f, и *p, ?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
16.12.2021, 16:42
Цитата Сообщение от Darlin Посмотреть сообщение
Спасибо) Только вот не доконца поняла, что конкретно делает *f, и *p, ?
Ну, там что-то такое примерно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import math
 
def get_perm_with_counter(n, counter):
    res = list()
    perm_lis_cur = [*range(1, n + 1)]
    n_cur = n
    k_cur = counter - 1
 
    while perm_lis_cur:
        ind_cur, k_cur = divmod(k_cur, math.factorial(n_cur - 1))
        if ind_cur >= len( perm_lis_cur ):
            break
        dig_cur = perm_lis_cur.pop(ind_cur)
        res.append(dig_cur)
        n_cur -= 1
    return res
)) Только что независимо ту же идею реализовал.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2021, 16:42
Помогаю со студенческими работами здесь

метод перестановки
Здравствуйте,объясните почему после перестановки y = xu мы получаем y'=u+xu' ?? (почему y' = u+xu' )?

метод перестановки
Доброго времени суток. есть программа метод перестановки. но не факт что она работает правильно... работает кодировка, а декодировка нет,...

Метод столбцовой перестановки
Всех приветствую, прошу помощи господа! Дано задание расшифровать данный текст Расшифровать фразу, зашифрованную столбцовой перестановкой...

Метод простой перестановки
Помогите пожалуйста!!! Никак не могу справится с лр по защите инфо(( Написать в delphi прогу шифрование м.простой...

Метод двойной перестановки
Здравствуйте. Есть строка зашифрованного текста, 49 знаков вместе с пробелами. Шифр двойной перестановки. нвоахпл ижанн...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru