由逆序列的序號反推出逆序列

2021-07-11 20:00:37 字數 1187 閱讀 1444

題目描述:

給出正整數 n ,則 1 到 n 這 n 個數可以構成 n !種排列。設 i1

… in

是乙個排列,則 a1

… an

是它的逆序列,其中 aj

是 j 的左邊大於 j 的數的個數。把這些排列按照逆序列從小到大的順序列出,如 n=3 時,列出 1 2 3 , 1 3 2 , 2 1 3 , 3 1 2 , 2 3 1 , 3 2 1 六個排列,因為它們的逆序列分別是 0 0 0 , 0 1 0 , 1 0 0 , 1 1 0 , 2 0 0 , 2 1 0 。

任務描述:

給出乙個數 n 和 k ,求 1 到 n 排列中按逆序列從小到大的順序下的第 k 個排列。

比如: n = 3 , k=2 ,則答案是 1 3 2 。

#include#includeusing namespace std;

const int f[11] = ;

int main()

; int out[11] = ;

//freopen("in.txt", "r", stdin);

scanf("%d", &z);

while (z--)

x[i]--;

k -= x[i] * f[i];

} int flag=0,indicator=0;

for (int i = n - 1;i >= 0;i--)//確定序列的每乙個數 的位置

else

}out[flag-1] = n - i;

flag = 0;indicator = 0;

} for (int i = 0;i < n-1;i++) printf("%d ", out[i]);

printf("%d\n", out[n - 1]);

memset(out, 0,sizeof(int)*11);

memset(x, 0, sizeof(int)*11); }}

//sample input

// 3

// // 3 1

// // 3 6

// // 10 100

// // sample output

// // 1 2 3

// // 3 2 1

// // 1 2 3 4 5 7 10 8 9 6

//

逆序列印單鏈表

二叉樹的操作 逆序列印單鏈表 void printslistfromtail2head pnode phead 逐個遍歷 每次從頭開始遍歷查詢到最後乙個要列印的元素 這個方法有點繁瑣,可以進行優化 void printslistfromtail2head pnode phead printf 逆序後...

演算法 逆序列印鍊錶

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個 list 借助棧先入後出的特性,可以很輕鬆地實現 public arraylist printlistfromtailtohead listnode listnode arraylist list newarraylist while stack.isem...

2 22逆序列印鍊錶

public class test node head create arr show head 逆序列印 public static void show node head stack s newstack 入棧 for node p head.next p null p p.next 出棧 wh...