输入两个正整数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
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, 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)___;
}
}
}
return 0;
}