用java将一个正整数拆分成若干个正整数的和,问有多少种分法?

 我来答
佩皮小鬼
2014-12-19 · TA获得超过8586个赞
知道大有可为答主
回答量:6213
采纳率:0%
帮助的人:5155万
展开全部
无聊了做着玩玩,用递归法,比如2=1+1,3=1+(2的所有组成法),5需要分解1+4,2+3,因为3+2和2+3是一样的,for循环只要到i<=n/2就够了.
然后就是剔除1+1+2和1+2+1的情况,继承set的特性重写了Composition(每个拆分的方式)的equals.
懒得读取n值了,直接在main里面赋值给n

public class Composition extends ArrayList<Integer> {
@Override
public boolean equals(Object other){
Composition comp = (Composition)other;
Collections.sort(this);
Collections.sort(comp);
if(this.isEmpty() || comp.isEmpty() || this.size() != comp.size())
return false;
for(int i=0; i<this.size(); i++)
if(this.get(i) != comp.get(i))
return false;
return true;
}

@Override
public int hashCode() {
return 0;
}
}

public class main {

public static void main(String[] args) {
int n = 6;
System.out.println(toStr(calc(n)));
}

public static Set<Composition> calc(int n) {
Set<Composition> possibility = new HashSet<Composition>();
Composition composition = new Composition();
switch (n) {
case 1:
composition.add(1);
possibility.add(composition);
return possibility;
case 2:
composition.add(1);
composition.add(1);
possibility.add(composition);
return possibility;
default:
for (int i = 1; i <= n / 2; i++) {
composition = new Composition();
composition.add(i);
composition.add(n - i);
possibility.add(composition);
if (i <= n - i) {
Set<Composition> partial_pos = calc(n - i);
for (Composition pos : partial_pos) {
pos.add(i);
possibility.add(pos);
}
}
}
return possibility;
}

}

public static String toStr(Set<Composition> possibility) {
String str = "total : " + possibility.size() + "\n";
for (Composition pos : possibility)
str += toStr(pos);
return str;
}

public static String toStr(Composition composition) {
String str = composition.get(0) + "";
for (int i = 1; i < composition.size(); i++)
str += (" + " + composition.get(i));
str += "\n";
return str;
}
}
匿名用户
2014-12-18
展开全部
你能不能问的更详细一点
追问
就比如说输入一个正整数4,我们可以有1+1+1+1,1+1+2,1+3,2+2,共4种方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_ehsu_
2014-12-18 · TA获得超过489个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:578万
展开全部
程序解决这种问题,不都是一个个试的么
不过,和貌似没啥大意思啊,通常算的是积,不是么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式