|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
来大神帮忙看看我的程序错在哪里,一直没有跑出来想要答案
这是我用C写的
题目:某人准备跑20圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多 设第一次圈数不能小于0,那么请问他可以有多少种跑完这 20 圈的方案? 输出方案总数,以及每种方案的排序。(比如1,19/ 1,2,17 都是有效方案)
代码:
#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;
}
void 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); //输出总方案个数
}
void a_cut(int a, int b ,int c) //不同跑圈次数的方案记录
{
int i,rsum=0,tun;
c --;
rsum ++;
if(c == 0) //最后一圈
{
wcut++; //总方案个数
v[c] = b; //最后一次圈数输出
printf("第%d个方案:\n ", wcut);
for(c = rsum; c >= 0 ; c--)
{
printf("%d ",v[c]);
}
printf("\n ");
}
else{
for(i = a + 1 ; i < (b / 2) ; i++)
{
b -= i; //剩下圈数
v[c] = i; //记录圈数
a_cut(i , b , c);
}
}
}
|
|