组合题5 个小题
已作答 0 / 5
完善程序 (排列数) 输入两个正整数 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
1#include <iostream>2#include <cstring>3using namespace std;4const int SIZE =25;5bool used[SIZE];6int data[SIZE];7int n,m,i,j,k;8bool flag;9int main()10{11 cin>>n>>m;12 memset(used,false,sizeof(used));13 for(i=1;i<=m;i++)14 {15 data[i]=i;16 used[i]=true;17 }18 flag=true;19 while(flag)20 {21 for(i=1;i<=m-1;i++) cout<<data[i]<<" ";22 cout<<data[m]<<endl;23 flag= [ ① ] ;24 for(i=m;i>=1;i--)25 {26 [ ② ];27 for(j=data[i]+1;j<=n;j++)28 if(!used[j])29 {30 used[j]=true;31 data[i]=[ ③ ] ;32 flag=true;33 break;34 }35 if(flag)36 {37 for(k=i+1;k<=m;k++)38 for(j=1;j<= [ ④ ];j++)39 if(!used[j])40 {41 data[k]=j;42 used[j]=true;43 break;44 }45 [ ⑤ ];46 }47 }48 }49 return 0;50}③处应填( )