#include<stdio.h>
#include<stdlib.h>
void reverse(char *num,int n){
int i;
for(i=0; i<n/2; i++){
char c = num[i];
num[i] = num[n-i-1];
num[n-i-1] = c;
}
}
char * getPermutation(int n, int k){
int i,j,t;
char *a = malloc(sizeof(char) * (n + 1));
for(i=0; i<n; i++){
a[i]='1'+i;
}
a[n] = '\0';
for(i=0; i<k-1; i++){
for(j=n-2; j>=0; j--){
int target = -1;
for(t=n-1; t>=j+1; t--){
if(a[j] < a[t]){
target = a[j];a[j]=a[t];a[t]=target;
break;
}
}
if(target != -1){
reverse(a+j+1,n-j-1);
break;
}
}
}
return a;
}
int main(){
int n,k,i;
scanf("%d%d",&n,&k);
char *order = getPermutation(n,k);
for(i=0; i<n; i++)
printf("%c",order[i]);
free(order);
return 0;
}
排列问题的解决之反向遍历
最新推荐文章于 2024-07-10 16:47:58 发布