整数的划分
相关问题:
有一个桶放了n升水 给了若干个桶 每个桶的容量是n升,每次可以往桶里倒一升或者两升或者整数升 问有多少种倒水的方法?
n是被划分的整数 m是它的加数 它的加数不会超过n
即n=6 而m=8是没有意义的 这个时候m相当于是6 最多就只有六个数相加得到6
对于q(6,6)=1+q(6,5)即除过了6那个式子 然后后面都加上
对于第四个的证明:
代码实现:
int fun(int n, int m)
{
if (n < 1 || m < 1) return 0;//都等于0的时候没有划分
if (n == 1 || m == 1)
{
return 1;
}
if (m > n)
{
return fun(n, n);
}
if (n == m)
{
return 1 + fun(n, n - 1);
}
else
return fun(n - m, m) + fun(n, m - 1);
}
int main()
{
cout << fun(6, 9) << endl;
cout << fun(6, 4) << endl;
cout << fun(6, 6) << endl;
cout << fun(6, 1) << endl;
return 0;
}
结果:(6, 9)和(6, 6)就是一样的划分结果