大致思路:全排列计数,全排列问题可以参考:全排列问题
code:
#include <iostream>
#include <string.h>
#include <stdio.h>
#define MAX2 1005
using namespace std;
int num;
int array[MAX2];
void swap(int *array,int i,int j)
{
int t;
t=array[i];
array[i]=array[j];
array[j]=t;
}
void transverse(int array[],int m,int n)
{
while(m!=n)
{
swap(array,m,n);
if(m+1==n)
break;
m++;
n--;
}
}
void reorder(int array[],int m,int num,int n)
{
int i,j;
while(true)
{
for(i=m-1;i>=1;--i)
{
if(array[i]<array[i+1])
break;
}
if(i==0)
{
break;
}
for(j=m;j>i;j--)
if(array[j]>array[i])
{
break;
}
swap(array,i,j);
transverse(array,i+1,m);
num++;
if(num==n)
break;
}
}
int main()
{
int n,m;
int i;
while(scanf("%d%d",&n,&m)!=-1)
{
memset(array,0,sizeof(array));
num=1;
for(i=1;i<=n;i++)
{
array[i]=i;
}
if(n>1)
{
if(m!=1)
{
reorder(array,n,num,m);
}
for(i=1;i<=n-1;i++)
{
cout<<array[i]<<' ';
}
cout<<array[n]<<endl;
}
else
{
cout<<array[1]<<endl;
}
}
return 0;
}