杰哥私房題 排列

2021-08-29 21:35:04 字數 1185 閱讀 6609

問題:

大家知道,給出正整數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。

輸入資料

第一行是乙個正整數m,表示測試資料的個數,下面是m 組測試資料,每組測試資料

第一行是2 個正整數n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n 個正整數,是1,2 … n

的乙個排列。

輸出要求

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

輸入樣例

33 1

2 3 1

3 13 2 1

10 2

1 2 3 4 5 6 7 8 9 10

輸出樣例

3 1 2

1 2 3

1 2 3 4 5 6 7 9 8 10

#include int mycompare(const void* e1, const void* e2)

int main()

int i,j,index = -1;

for(i = 0; i < k; i ++)

}int m;

if(index == -1 )

printf("\n");

return 0;

}int candidate = an[j], index2 = j;

for(m = j; m < n; m++)

}int swap = an[index];

an[index] = candidate;

an[index2] = swap;

qsort(an + j, n - j , sizeof(int), mycompare);

} }int i;

for(i = 0; i < n; i++)

printf("\n");

return 0;

}

杰哥私房題 487 3279

號碼的標準格式是七位十進位制數,並在第 三 第四位數字之間有乙個連線符。撥 號盤提供了從字母到數字的對映,對映關係如下 a,b,和c 對映到 2 d,e,和f 對映到 3 g,h,和i 對映到 4 j,k,和l 對映到 5 m,n,和o 對映到 6 p,r,和s 對映到 7 t,u,和v 對映到 8...

杰哥私房題 麥森數

問題描述 形如2p 1 的素數稱為麥森數,這時p 一定也是個素數。但反過來不一定,即如果p 是 個素數。2p 1 不一定也是素數。到1998 年底,人們已找到了37 個麥森數。最大的乙個是 p 3021377,它有909526 位。麥森數有許多重要應用,它與完全數密切相關。你的任務 輸入p 1000...

杰哥私房題 校門外的大樹

問題描述 某校大門外長度為 l 的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1 公尺。我們 可以把馬路看成乙個數軸,馬路的一端在數軸 0 的位置,另一端在 l 的位置 數軸上的每 個整數點,即 0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點...