马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:某人准备跑20圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多 设第一次圈数不能小于0,那么请问他可以有多少种跑完这 20 圈的方案? 输出方案总数,以及每种方案的排序。(比如1,19/ 1,2,17 都是有效方案)
我使用Debug进行调试的时候发现a_cut()函数跑完if语句后,直接从for()开始了,导致我直接之前设想的参数不正确,结果也有部分没有保存到数组里,有大神可以帮忙解答吗?
这是 主函数 i = 3 时,第2次调用 a_cut()出现的问题, e 和 c 的值不相等
部分结果没有保存到数组
代码:#include <stdio.h>
#include <stdlib.h>
int v[100]={0};
int wcut = 0; //总方案个数
int Sumcut = 0;
void a_cut(int a, int b ,int c);
int run_num(int x) //计算不同圈数需要几次的次数
{
int i,z=1; //z代表最少的跑圈次数
for (i = 1; z <= x ; i++) //i代表增加的跑圈次数,所以最小为1
{
x -= i;
z += i;
}
return i;
}
int main(void)
{
int i,rnum; //跑圈圈数
int x=0,z; //x、z代表头圈圈数、跑圈次数
printf("请输入跑圈的圈数:");
scanf("%d",&rnum);
z=run_num(rnum);
for(i = 2 ; i <= z ; i++)
{
/* Sumcut = i; */
a_cut(x , rnum , i); //从2开始,记录不同跑圈次数的方案,i=2,就是从跑圈使用2次的方案开始记录
}
printf("总共有%d个方案\n",wcut); //输出总方案个数
return 0;
}
void a_cut(int a, int b ,int c) //不同跑圈次数的方案记录
{
static int rsum = 0;
int q , w , e = 0;
e = c - 1;
if(e == 0) //最后一圈
{
wcut++; //总方案个数
v[e] = b; //最后一次圈数记录
printf("第%d个方案:\n ", wcut);
for(e = rsum; e >= 0 ; e--)
{
printf("%d ",v[e]);
}
printf("\n ");
rsum = 0;
}
else{
for(q = a + 1 ; q < (b / 2) ; q++)
{
rsum ++;
w = b - q; //剩下圈数
v[e] = q; //记录圈数
a_cut(q , w , e);
}
}
}
|