您的位置:首页 > 其它

排列的字典序问题

2017-04-04 15:39 253 查看
n个元素有n!个不同的排列。将这n!个不同的排列按字典序排列,并编号为0,1,2,…,n!-1。给定n个元素及一个排列,计算出这个排列的字典序值,同时给出字典序排列的下一个排列。

样例输入:
8
2 6 4 5 8 1 7 3 

样例输出:
8227
2 6 4 5 8 3 1 7

#include<stdio.h>
#define n 8
int fact(int m){
if(m == 0)
return 1;
return m * fact(m - 1);
}
int main()
{
int a
= {2,6,4,5,8,1,7,3};
int i,j;
int count = 0;
for(i = 0;i < n;i ++){
count = count + (a[i] - 1) * fact(n - i - 1);
for(j = i + 1;j < n;j ++){//因为a[i]后面的数不能跟前面的重复,所以循环剪掉大于a[i]的数
if(a[j] > a[i]){
a[j] --;
}

}
}
printf("%d",count);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: