编辑代码

#include <iostream>
#include <vector>
using namespace std;

/*  
 * 笔试:不限制时间复杂度,可以用递归实现,也可以暴力循环。
 * 某人准备跑20圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。 
 * 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多 
 * 设第一次圈数不能小于1,那么请问他可以有多少种跑完这 20 圈的方案? 
 * 输出方案总数,以及每种方案的排序。
 * (比如1,19/ 1,2,17 都是有效方案)
 */
int count = 0;

void show(int last, int reg, vector<int> &vec)
{
    if(reg == 0)
    {
        count++;
        for(int i=0;i<vec.size();i++)
        {
            cout << vec[i] << " ";
        }
        cout << endl;
        return;
    }
    for(int i=last+1; i<=reg; i++)
    {
        vec.push_back(i);
        show( i, reg-i, vec);
        vec.pop_back();
    }
}

int main() {
    vector<int> vec;
    show(0,10,vec);
	cout << "count : " << count << endl;
	return 0;
}