题目地址:HDU-1027
做法跟这个一样 排列 POJ - 1833
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,k;
int num[1000];
int main() {
int i,x,y,MIN;
while(~scanf("%d %d",&n,&k)) {
for(i=1; i<=n; i++)
num[i]=i;
int p=0;
while(1) {
p++;
if(p==k)break;
x=0,y=0,MIN=999999999;
for(i=n-1; i>0; i--)
if(num[i]<num[i+1]) {
x=i;
for(int j=i+2; j<=n; j++) {
if(num[j]>num[i]&&num[j]<num[i+1]&&MIN>num[j]) {
MIN=num[j];
y=j;
}
}
break;
}
if(x!=0&&y==0)
y=x+1;
int t=num[x];
num[x]=num[y];
num[y]=t;
sort(num+x+1,num+n+1);
}
for(i=1;i<n;i++)
printf("%d ",num[i]);
printf("%d\n",num[i]);
}
return 0;
}