第Q个全排列
第Q个全排列 解题思路:全排列可以用dfs实现,但是循环输入明显会卡掉直接暴力取结果的算法,然后想想如果只需要知道第几个的话,其实手推也不难,因为每一位取第几个数取决于他处于当前状态下阶乘的几倍,代码实现如下: # include <bits/stdc++.h> using namespace std ; int num [ 10 ] [ 15 ] , n , cnt , sum , s [ 15 ] , vis [ 15 ] ; int main ( ) { for ( int i = 1 ; i <= 9 ; i ++ ) { num [ i ] [ i ] = 1 ; for ( int j = i - 1 , k = 1 ; j >= 1 ; j -- , k ++ ) { num [ i ] [ j ] = num [ i ] [ j + 1 ] * k ; } } while ( scanf ( "%d %d" , & n , & cnt ) != EOF ) { vector < int > v ; for ( int i = 1 ; i <= n ; i ++ ) { v . push_back ( i ) ; } for ( int i = 1 ; i <= n ; i ++ ) { int ans = 0 ; while ( cnt > num [ n ] [