组合题5 个小题
已作答 0 / 5
1.(排列数)输入两个正整数 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++ )22 cout << data[i] << " ";23 cout << data[m] << endl;24 flag = ①;25 for ( i = m; i >= 1; i-- )26 {27 ②;28 for ( j = data[i] + 1; j <= n; j++ )29 if ( !used[j] )30 {31 used[j] = true;32 data[i] = ③;33 flag = true;34 break;35 }36 if ( flag )37 {38 for ( k = i + 1; k <= m; k++ )39 for ( j = 1; j <= ④; j++ )40 if ( !used[j] )41 {42 data[k] = j;43 used[j] = true;44 break;45 }46 ⑤;47 }48 }49 }50}⑤处应填( )