#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;
}