|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
- }
- }
- }
复制代码
|
|