问题描述:
n个元素{1,2,…, n }有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1。每个排列的编号为其字典序值。例如,当n=3时,6 个不同排列的字典序值如下:
任务:给定n 以及n 个元素{1,2,…, n }的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。
Input
第1 行是元素个数n(n < 15)。接下来的1 行是n个元素{1,2,…, n }的一个排列。
Output
第一行是字典序值,第2行是按字典序排列的下一个排列。
Sample Input
8
2 6 4 5 8 1 7 3
Sample Output
8227
2 6 4 5 8 3 1 7
———————————————————————————–
思路:
1,2对应:1 * 后7位数字全排列
26对应:21,23, 24, 25 * 后6位数字的全排列
以此类推。。。
{2,6,4,5,8,1,7,3}的字典序值为
1*7!+4*6!+2*5!+2*4!+3*3!+0*2!+1*1!=8227
2, 从末尾找第一个减小的数,替换成后面的比该数字大的最小数,剩下的从小到大排列 我们来看, {…,4,6,9}的下一排列为{…,4,9,6}, {…,4,9,6}的下一排列为{…,6,4,9}; 如果再进一步看
{…,3,9,6,4}的下一排列为{…,4,3,6,9}
启示:用比3(第一个减小的数)大的最小数4顶替3的位置,剩下的数从小到大全排列