#include <stdio.h>
/*
* 笔试:不限制时间复杂度,可以用递归实现,也可以暴力循环。
* 某人准备跑20圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。
* 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多
* 设第一次圈数不能小于1,那么请问他可以有多少种跑完这 20 圈的方案?
* 输出方案总数,以及每种方案的排序。
* (比如1,19/ 1,2,17 都是有效方案)
*/
int count=0;
void show(int last, int reg, int* a, int index)
{
if(reg == 0)
{
count++;
for(int i=0;i<index;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return;
}
for(int i=last+1; i<=reg; i++)
{
a[index] = i;
show(i, reg-i, a, index+1);
a[index] = 0;
}
}
int main () {
int a[6] = {0};
show(0,10,a,0);
printf("count = %d\n",count);
return 0;
}