把数字拆分成递减序列

#include <iostream>
#include <vector>
using namespace std;
vector<int> t;
void traceback(int total, int n,int len) {    
    if (n == 0||total == 0) {
        for (int i = 0; i < t.size() - 1; i++) {
            if (t[i] < t[i + 1])return;
        }
        for (int i = 0; i < t.size();i++) {
            cout << t[i]+1 << ' ';
        }
        if (t.size() < len) {
            for (int i = 0; i < len - t.size();i++) {
                cout << 1 << ' ';
            }
        }
        cout << endl;
        return;
    }
    for (int i = total; i >=total/n&&i>0;i--) {
        t.push_back(i);
        traceback(total - i, n - 1, len);
        t.pop_back();
    }
}
int main() {
    int m, n;
    while (cin >> m >> n){
        int len = n;
        traceback(m - n, n,len);
    }
    return 0;
}
posted @ 2021-11-18 20:05  Zupernova  阅读(50)  评论(0编辑  收藏  举报