全排列函式應用

2021-08-16 20:16:42 字數 1082 閱讀 4039

題目描述: 

大家知道,給出正整數n,則1到n這n個數可以構成n!種排列,把這些排列按照從小到大的順序(字典順序)列出,如n=3時,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六個排列。 

任務描述: 

給出某個排列,求出這個排列的下k個排列,如果遇到最後乙個排列,則下1排列為第1個排列,即排列1 2 3…n。 

比如:n = 3,k=2 給出排列2 3 1,則它的下1個排列為3 1 2,下2個排列為3 2 1,因此答案為3 2 1。 

input

第一行是乙個正整數m,表示測試資料的個數,下面是m組測試資料,每組測試資料第一行是2個正整數n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n個正整數,是1,2 … n的乙個排列。

output

對於每組輸入資料,輸出一行,n個數,中間用空格隔開,表示輸入排列的下k個排列。

sample input

3

3 12 3 1

3 13 2 1

10 2

1 2 3 4 5 6 7 8 9 10

sample output
3 1 2

1 2 3

1 2 3 4 5 6 7 9 8 10

思路:這題可以用next_permutation函式,這就簡單了,但是注意要用c++交,用g++交就tle超時,迷啊**

該函式的用法:next_permutation(a,b),其中a,b分別表示排序的首位址和尾位址,預設是按字典序公升序重排列,每次將陣列變成下乙個字典序串,當排到最大字典序串時,返回0,如果繼續排序,將變成最小字典序字串。next_permutation函式還可以有第三個元素(函式)用來自己定義排序的規則,//與之對應的降序重排排函式是prev_permutation//

#include#include#include#includeusing namespace std;

int main()

for(int i=0;inext_permutation(a,a+n);

for(int i=0;iprintf("\n");

}}

全排列函式

一 next permutation 函式,作用是輸出所有比當前排列 排列大的排列 順序為由小到大排 include include includeusing namespace std int main string str cin str while next permutation str.b...

全排列函式

人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。火星人用...

全排列函式

nest permutation函式 向下求 include include 標頭檔案 using namespace std intmain dowhile next permutation a,a 3 這是乙個求乙個排序的下乙個排列的函式 return0 執行結果 123 1322 1323 1...