日期:2014-05-20  浏览次数:20613 次

一道软件设计大赛的模拟试题,求解?

官网上下载的。。。看到题目思路很乱,不知该从何下手,求高人指点思路

9.代码设计(满分18分)

整数的分划问题。 
如,对于正整数n=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)
程序输出该整数的所有划分。


------解决方案--------------------
来来,这是前一次一个仁兄的一个变体,估计你能解决问题~你在删选一下吧

public static void main(String[] args) {
run(6);
}

public static void run(int n) {
ArrayList<Integer> al = new ArrayList<Integer>();
p(n, al, n);
}

private static void p(int n, List<Integer> al, int size) {
if (n == 0) {
for (Integer i : al)
System.out.print(i + " ");
System.out.println();
} else if (n < 0) {
return;
} else {
int num = al.size();
for (int i = 1; i <= size; i++) {
al.add(i);
p(n - i, al, size);
al = al.subList(0, num);
}
}
}
------解决方案--------------------
递推,n=(n-1)+1;
从2的时候一路算上去。