首页 > 试题广场 >

设 q ( n , m )是将正整数

[单选题]
q n m )是将正整数 n 划分成最大加数不大于 m 的若干不同正整数之和的划分数,则 q n m )为( )。
強头像
递归思想,1)n=1或m=1时,n分成不大于m的正整数的和的划分数只有1一种。(修正:由于是分成不同正整数之和,因此n>1, m=1时 q(n,m)=0)     2)n<m时,n分成不大于m的整数==n分成不大于n的整数(n总不能大于n吧)==q(n,n)。3)n=m时 将n分成n(m)这一种情况去掉,就变成1+q(n,n-1)。4)n>m>1时,首先q(n,m-1)中m-1>0为正整数 所以1要排除,这一项意味着把所有将n拆解出的可能中包含m的部分去掉,然后去掉的部分等价于q(n-m,m),这个式子意味着n被默认已经拆出来一个m,然后再让他分解出的整数不大于m,跟前面保持一致(这样就排除了3)。
总结:这题的关键是不要去纠结究竟具体有多少种可能,这样就开朗了。

编辑于 2019-04-03 14:05:44 回复(2)
n==1 or m==1 只有一种情况,即最大加数为1
n<m,q(n,m)=q(n,n),因为最大加数不会超过n
n==m,分两种情况,1.最大加数为m,这种只有一个情况符合 2.最大加数小于m,为q(n,n-1)
n>m,分两种情况,1.最大加数为m,等价于加数中已有了m这个加数,j将剩下的n-m划分为最大加数为m,所以为q(n-m,m) 2.最大加数小于m,为q(n,m-1)
发表于 2018-05-21 08:53:44 回复(1)
若干不同正整数之和-----在n>1且m=1时,n只能表示成n个1的和(相同的正整数1) 不是应该为0麽 答案不是D嘛😹
发表于 2018-02-19 16:57:27 回复(1)
最令我疑惑的地方是他这些条件判断的顺序以及不封闭,n=m=1时按顺序第一个就结束吗,还是都要呢?摸不着头脑
发表于 2022-02-14 23:00:25 回复(0)
def split_count(n,m):
    """split the a positive integer into different combinations of positive
        integers smaller&nbs***bsp;equal to itself"""

    if n==1&nbs***bsp;m==1:
        return 1
    elif n==m:
        return 1+split_count(n,n-1)
    elif n<m:
        return split_count(n,n)
    elif n>m:
        return split_count(n-m,m)+split_count(n,m-1)


def main(n,m):
    print(f"Split {str(n)} using numbers smaller than&nbs***bsp;equal to {str(m)}")
    print(f"There are total {str(split_count(n,m))} combinations of division")

main(4,4)


编辑于 2022-01-27 03:27:31 回复(0)
答案是D啊。题目中说的是不同正整数之和
发表于 2018-09-25 15:14:58 回复(1)
为何n = m时,q(n, m) = 1 + q(n, n-1)?
题目要求都是正整数,q(n, n) = q(n, n-1)才对啊
发表于 2018-06-04 03:30:04 回复(0)
第一和第四很容易排除,第二和第三的区别,你可以把n=5,m=2待进去;他们两也就最后一项不同,
一个是q(5,1)+q(3,2);另外一个是q(5,1)+q(3,1);最直接可以验证了;理论的话,有点像概率论里面排序的问题;就那条不区分先后的排列公式。
发表于 2017-08-10 11:26:32 回复(1)