※ 引述《ptt0720 (濕濕)》之銘言:
: 最近寫題目寫到一題
: http://i.imgur.com/vYeB7nL.png
: 要先把字串依照a b c順序排列好
: 之後進行排列組合
: 然後印出最中間的那一筆
: 我用的方法是itertools的module
: 但是在server進行運算的時候 系統說我超過時間了
: 限制時間是12000ms
: 我的code
: http://i.imgur.com/YvcrD7b.png
: 我在想應該是產生全部排列組合太沒有效率了
: 但是又不知道如何生成一半組合就好
應該就只是簡單的高中數學
即 1,2,...,n 的排列, 依字典序排列, 取第 n!/2 個 (n≧2)
容易知道:
(1) 當 n 為偶數時, 所求為
n/2, n, n-1,..., n/2+1, n/2-1,..., 2, 1
(第一位排 n/2, 剩下由大至小排列)
(2) 當 n 為奇數時, 所求為
(n+1)/2, (n-1)/2, n, n-1,..., (n+3)/2, (n-3)/2,..., 2, 1
(第一位排 (n+1)/2, 第二位排 (n-1)/2, 剩下由大至小排列)
eg. n = 10
第 10!/2 個排列為 5, 10, 9, 8, 7, 6, 4, 3, 2, 1
eg. n = 9
第 9!/2 個排列為 5, 4, 9, 8, 7, 6, 3, 2, 1