编辑代码

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