题目:立方数和的组合
输入正整数n,求将n分解为若干个正整数的立方和有多少种方法?
例如,21有3种写法,77有22种写法。
思路:简单递归搞定
#include <stdio.h>
#include <math.h>
int w=0;//记录有多少种写法
int maxNumber(int x) //求一个数最大的立方根
{
int i=1;
while(pow(i,3)<=x)
{
i++;
}
return i-1;
}
int sum(int x,int n)//x:当前需要寻找立方根的最大值,n:当前求组合的数字
{
if(x<2)
{
w++;
return 1;
}
int k=n/(int)pow(x,3);
int i;
for(i=0;i<=k;i++)
{
sum(x-1,n-i*(int)pow(x,3));
}
return 0;
}
int main()
{
printf("Please input:\n");
int n;
scanf("%d种写法",&n);
while(n)
{
w=0; //每次都要初始化
int x=maxNumber(n);
sum(x,n);
printf("%d\n",w);
printf("Please input:\n");
scanf("%d",&n);
}
return 0;
}