#include<stdio.h> int main() { int n,s,i,j,k,temp; int a[1100]; while(scanf("%d%d",&n,&s)!=EOF) { for(i=1;i<=n;i++) a[i]=i; for(i=1;i<s;i++) { k=n; while(a[k]<a[k-1]) k--;//当前面的比后面的大就执行,故此语句是为了找到从右到左最小的一个 j=k-1;//j位置即是从右到左最小的一个 while(a[k]>a[j] && k<=n) k++;//从左到右,找到比j位置大的最后一位,因为j后面的序列已经是按最小序列一步一步变换的 temp=a[k-1]; a[k-1]=a[j]; a[j]=temp; j++,k=n; while(j<k) { temp=a[k]; a[k]=a[j]; a[j]=temp; j++,k--; } } for(i=1;i<n;i++) printf("%d ",a[i]); printf("%d\n",a[i]); } return 0; }
hdu1027在1-N自然数组成递增序列,找第M小的序列!难
最新推荐文章于 2022-01-13 11:58:29 发布