1429-全排列的输出
描述
全排列就是n个不同元素排成一列,我们不妨可以简单地将n个元素理解为自然数1,2,…,n。现假设不同的全排列按照字典序自动从小到大排,123…n的序号为零。编程读入n、m,输出序号为m(m<=n!-1)的全排列。例如n=5,m=2,则输出为:
1 2 4 3 5
输入
一行两个自然数n、m(1<n<20,0<=m<=n!-1)。
输出
序号为m的全排列,每个元素后有一个空格。
样例输入
3 5
样例输出
3 2 1
#include <stdio.h> int main() { char e[21]={0}; long s[21]={1},m,j,k,l; int i,n; scanf("%d%ld",&n,&m); m=m+1; s[0]=1; for(i=1;i<=n;i++) s[i]=s[i-1]*i; for(i=n-1;i>=0;i--) { j=(m-1)/s[i]+1;l=0;k=0; do{ k++; if(e[k]==0) l++; }while(l<j); m-=(m-1)/s[i]*s[i]; e[k]=1; printf("%d ",k); //if(i!=0) printf(" "); } printf("\n"); return 0; }