題目連結(jié):
題目大意:
第一列給定一正整數(shù) n (2 ≦ n ≦ 5),代表有 n 筆測試資料。每筆測試資料佔(zhàn)一列,每一列會先給定一正整數(shù) i (i 只會是 12 、 123 、 1234 、 12345 或是 123456 其中一者),代表要以 i 的位數(shù)數(shù)字作為排序的依據(jù)。
接著給定兩正整數(shù) j 、 k ,代表要找出 i 的位數(shù)數(shù)字之由小到大的排列的第 j 、 k 個數(shù)字,並求兩者的最大公因數(shù)。
5
12 1 2
123 2 5
1234 15 9
1234 3 4
1234 2 5
這題可以把「12」、「123」等等的數(shù)字當(dāng)作字串,並使用 <algorithm> 底下的 next_permutation() 函式,去慢慢地找到第 j 以及第 k 個排列。再用經(jīng)典的輾轉(zhuǎn)相除法求出兩者的最大公因數(shù)。
也可以直接用算的算出第 j 、 k 個排列。設(shè) i = 1234,j = 4,k = 7 。
因?yàn)?j ≦ 6 ,所以我們知道其一定是1開頭的,並將 j 取 6 的餘數(shù)為 4 ;接著 2 < j ≦ 4 ,所以 1 後面接著的是 3 (排除 1 之後第 2 小的數(shù)字)。並將 j 取 2 的餘數(shù),但是不能為 0 ,所以為 2 ;接著 1< j ≦ 2 ,所以 3 後面接著 4 (除掉 1 、 3 之後的第 2 小的數(shù)字)。
因此,我們得到 i 的第 j 個排列為 1342 。同理,i 的第 k 個排列為 2134 。兩者的最大公因數(shù)為 22 。
以上,即是用計算的算出 i 的排列之方法。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。