输入两个正整数 n, m (1 ≤ n ≤ 20, 1 ≤ m ≤ n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列
比如输入
3 2
输出为
1 2
1 3
2 1
2 3
3 1
3 2
#include <iostream> #include <cstring> using namespace std; const int SIZE=25; bool used[SIZE]; int data[SIZE]; int m,n,i,j,k; bool flag; int main() { cin>>n>>m; memset(used,false,sizeof(used)); for(i=1;i<=m;i++) { data[i]=i; used[i]=true; } flag=true; while(flag) { for(i=1;i<=m-1;i++) cout<<data[i]<<" "; cout<<data[m]<<endl; flag=____(1)____; for(i=m;i>=1;i--) { _____(2)_______; for(j=data[i]+1;j<=n;j++) if(!used[j]) { used[j]=true; data[i]=_____(3)______; flag=true; break; } if(flag) { for(k=i+1;k<=m;k++) for(j=1;j<=_____(4)_____;j++) if(!used[j]) { data[k]=j; used[j]=true; break; } ______(5)_______; } } } }