大概就是給你乙個排列(長為n,1~n的任意排列),此排列作為n進製的1,10進製加m後,用該n進製應怎樣表示(題目概括很殘,好像還錯了,直接去洛谷看題吧)
最簡單的方法,用全排列函式乙個乙個的找就行.
下面全排列函式
下乙個排列:next_permutation(陣列起始位置,陣列末位置)
例如:next_permutation(a+1,a+n+1) 找出陣列從a[1]到a[n]的下乙個排列
如果a[1]~a[n]為1 2 3 4 5
則next_permutation後為 1 2 3 5 4
上乙個排列:prev_permutation(a+1,a+n+1)
同理: 1 2 3 5 4 的上乙個排列為 1 2 3 4 5
下面,更重要的,康拓展開
康拓展開是找到乙個排列在其全排列中的位置
例如n=5的排列 共有120個
則12345 在其全排列中的位置是 1
54321 在其全排列中的位置是0
康拓展開的公式為x=an(n-1)!+a(n-1)(n-2)!+…a1(0)!
a(i)為第i位上的數是在未出現的數中排第幾,例如,第一位,當所有數都沒出現時,如果第一位是4,則其在未出現數中排第四,當4已出現,第二位如果是5,其在未出現數中,也排第四.
所以可以通過全排列來推其在全排列中的位置.但更重要的是,用其在全排列中的位置推其數列
例如,n=5,x=96 ,求這個數列具體是什麼!
x=96 說明,其前面有95個比他小的數列
所以95/4!= 3 …23 第一位上,有三個數比他小
23%6 = 3 …5 第二位上也有三個數比他小
5 % 2 = 2 …1 第三位上有兩個數比他小
以此類推,最後
結果是45321
為什麼95/4!的商是其第一位的數,因為x= an(n-1)!+…
可以看成an(n-1)是乙個大部分,後面所有是另一大部分,所以除以4!以後,得到的商應該是an,餘數是剩下的部分.所以可求.
end!
洛谷P1088 火星人(STL)
人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。火星人用...
洛谷 P1088 火星人
題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...
洛谷 P1088 火星人
題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...