求助
  • 板块学术版
  • 楼主Chris_Potter
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/9 10:55
  • 上次更新2023/11/2 22:12:16
查看原帖
求助
1051902
Chris_Potter楼主2023/9/9 10:55

输入两个正整数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;
}
2023/9/9 10:55
加载中...