A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张昶 中级黑马   /  2013-4-23 23:28  /  1380 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张昶 于 2013-4-24 16:09 编辑

如,对于正整数n=6,可以分划为:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。

2 个回复

倒序浏览
用递归算
算法如下:
!,设P(n)为整数n的不同划分个数
2,q(n,m)表示在整数n的所有不同划分中,将最大加数n1不大于m的划分个数记做q(n,m);
建立递归关系,分别有如下情况:
1,q(n,1)=1,n>=1;
2,q(n,m)=q(n,n),m>=n;
3,q(n,n)=q(n,n-1)+1;正整数n的划分和n1<=n-1的划分组成
4,q(n,m)=q(n,m-1)+q(n-m,m),n>m>1
代码如下:
public int q(int n,int m){
if((n<1)||(m<1))return 0;
if((n==1)||m==0)return 1;
if(n<m)return q(n,n);
if(n==m)return q(n,m-1)+1;
return q(n,m-1)+q(n-m,m);
}
以前搞过这个问题,思想大体就是这样,不太容易理解,但理解之后挺有意思的,参照书上的,非原创;
回复 使用道具 举报
谢谢,却是有意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马