nyoj 143 第幾是誰?

2021-08-18 04:07:58 字數 1493 閱讀 1801

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3描述

現在有"abcdefghijkl」12個字元,將其按字典序排列,如果給出任意一種排列,我們能說出這個排列在所有的排列中是第幾小的。但是現在我們給出它是第幾小,需要你求出它所代表的序列.輸入

第一行有乙個整數n(0

輸出輸出乙個序列,佔一行,代表著第m小的序列。

樣例輸入

3

1302715242

260726926

樣例輸出

abcdefghijkl

hgebkflacdji

gfkedhjblcia

**[路過這]原創

典型的康拓逆展開問題,還是依照x=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!這個公式,但是這次是倒著來的,給出了x,需要求出來an,a(n-1).....a2,a1,跟以前學的解方程一樣,多元一次方程,有很多解,但是在這裡符合條件0<=an<12的只有一組解,在這裡先找一組數試試吧,例如:

(1)找出第

96個數

1.、首先用96-1得到

95      //

首先減一,是因為題意為第幾個數,而康拓展開所得是有多少個比本身小的數列個數,減一正好。

2、用95去除

4! 得到3餘

23//相當於

x除以(

n-1)!得

3餘a[ n ],

a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!

.。有3個數比它小的數是4,

所以第一位是4

3、用23去除

3! 得到3餘

5,有3個數比它小的數是4但

4已經在之前出現過了所以第二位是5(

4在之前出現過,所以實際比

5小的數是3個)

4、用5去除

2!得到2餘

1,有2個數比它小的數是

3,第三位是35、

用1去除

1!得到1餘

0,有1個數比它小的數是

2,第二位是26、

最後乙個數只能是1

所以這個數是45321

同理程式是這樣的

#include#includeint main();//存階乘

for(int i=2;i<=15;i++)

char str[12]=;//對應輸出

char str1[12];

int n,temp; //temp用來記錄第i個數在當前未出現的元素中排第幾位(從0開始)

long long m;

scanf("%d",&n);

while(n--)

printf("\n");

} return 0;

}

NYOJ 143第幾是誰

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述現在有 abcdefghijkl 12個字元,將其按字典序排列,如果給出任意一種排列,我們能說出這個排列在所有的排列中是第幾小的。但是現在我們給出它是第幾小,需要你求出它所代表的序列.輸入第一行有乙個整數n 0輸出 輸出乙個序列,...

NYOJ 143 第幾是誰?

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有 abcdefghijkl 12個字元,將其按字典序排列,如果給出任意一種排列,我們能說出這個排列在所有的排列中是第幾小的。但是現在我們給出它是第幾小,需要你求出它所代表的序列.輸入 第一行有乙個整數n 0 輸出輸出乙個序...

nyoj 139 我排第幾 143 第幾是誰

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在有 abcdefghijkl 12個字元,將其所有的排列中按字典序排列,給出任意一種排列,說出這個排列在所有的排列中是第幾小的?輸入第一行有乙個整數n 0 輸出輸出乙個整數m,佔一行,m表示排列是第幾位 樣例輸入2 abcd...