您的位置:首页 > 其它

整数划分问题

2016-04-01 21:36 169 查看
将正整数n表示成一系列正整数之和,n=n1+n2+n3+...+nk,其中n1>=n2>=...>=nk>=1,k>=1。

正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分树,记作p(n)。

算法思路:在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。

递归式为:

q(n,m)=1 n=1,m=1

q(n,m)=q(n,n) n<m

q(n,m)=1+q(n,n-1) n=m

q(n,m)=q(n,m-1)+q(n-m,m) n>m>1

算法如下:

package cn.aaa;

import java.util.Scanner;

//整数划分问题

public class NumDivide {

//整数划分方法

public static int q(int n,int m){ //n为输入的数,m为能分解的数

if(n<0 || m<0)

return 0;

if(n==1 || m==1)

return 1;

else if(n==m && m>1)

return 1+q(n,m-1);

else if(n==m)

return q(n,n);

return q(n,m-1)+q(n-m,m);

}

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int num = s.nextInt();

System.out.println("正整数num的划分个数为:"+q(num,num));

}

}

结果显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: