第k个排列
标题:第k个排列 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有 n! 种排列。
按大小顺序升序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
from itertools import permutations while True: try: n, k = int(input()), int(input()) print("".join(map(str, list(permutations(range(1, n + 1), n))[k - 1]))) except: break
n = int(input()) k = int(input()) list_ = [i for i in range(n)] res = [] start = 0 jieceng = 1 for i in range(n-1): jieceng *= (i + 1) for i in range(n-1,0,-1): k2 = k % jieceng k = k // jieceng if k2 == 0: res.append(list_.pop(k - 1)) res += list_[::-1] break elif k2 == 1: res.append(list_.pop(k)) res += list_ break else: res.append(list_.pop(k)) jieceng = jieceng // i k = k2 r = "" for i in res: r+=str(i+1) print(r)