在今年的亞洲經濟發展研討會中,主辦國為了避免中共或台灣抗議,決定將所有參加國家的座位排為一直線。假設今年的參加國家有3個,用英文字母A, B, C來代表國家,則所有的排列組合依字典順序如下:
ABC
ACB
BAC
BCA
CAB
CBA
如果今年是第一屆,座位的排列就是A B C。假如是第四屆,排列就是B C A。假如是第七屆,就要再從頭循環,於是排列就又輪回A B C。可是主辦國發現,因為參加國家眾多,座位排列難以計算。給定參加國家的個數和今年年會的屆數,你的任務是找出座位的排列方式。
輸入說明:
輸入的資料中每一行表示一次會議,一行包含兩個數字。
第一個數字表示參加國家的個數
n(3≤n≤12)
,第二個數字表示這次年會的屆數
m(1≤m≤2000000000)
。
輸入資料的結尾是以一行0 0為結束(這一筆資料不必處理)。
輸出說明:
對於每一筆輸入資料,輸出一行排列的結果。國家代號如上例中,一律從A開始。請注意輸出座號排列的代號一律是大寫英文字母。
範例輸入:
3 4
3 12
5 120
12 12
0 0
範例輸出:
B C A
C B A
E D C B A
A B C D E F G H J L K I
用Python來做一下
from itertools import *
letters = 'ABCDEFGHIJKL'
querylst = [[3,4], [3,12], [5,120], [12,12]]
for m,n in querylst:
x = ''.join(list(islice(cycle(permutations(letters[0:m], m)),n))[n-1])
print(f"{m} {n} -> {x}")
結果:
3 4 -> BCA
3 12 -> CBA
5 120 -> EDCBA
12 12 -> ABCDEFGHJLKI