本帖最后由 baohui54883 于 2009-10-17 18:02:09 编辑

解决方案 »

  1.   

    贴一 个 以前写的public class T {
    public static void main(String[] args) {
    split(20, 0);
    } static LinkedList<Integer> list = new LinkedList<Integer>(); public static void split(int n, int base) {
    if (n == 0) {
    System.out.println(list);
    return;
    }
    for (int i = base + 1; i <= n; i++) {
    list.addLast(i);
    split(n - i, i);
    list.removeLast(); // 这行看不懂,为什么要删除最后一个元素?[/color]
    }
    }}
      

  2.   

    改一下,重复的数字 可以吗?public class T {
    public static void main(String[] args) {
    split(10, 0);
    } static LinkedList<Integer> list = new LinkedList<Integer>(); public static void split(int n, int base) {
    if (n == 0) {
    if(list.size() == 1)
    {
    return;
    }
    System.out.println(list);
    return;
    }
    for (int i = base + 1; i <= n; i++) {
    list.addLast(i);
    split(n - i, i);//split(n - i, i-1),要重复就用这个递归
    list.removeLast(); // 
    }
    }}
      

  3.   

    加个限制条件就行了i <= n & i <= 30static LinkedList<Integer> list = new LinkedList<Integer>(); public static void split(int n,int base){
    if(n == 0){
    System.out.println(list);
    return;
    }
    for(int i = base + 1;i <= n & i <= 30;i++){
    list.addLast(i);
    split(n - i,i);
    list.removeLast(); // 这行看不懂,为什么要删除最后一个元素
    }
    } public static void main(String[] args){
    split(50,0);
    }
      

  4.   

    在 加 1个条件 呗。 public class T {
    public static void main(String[] args) {
    split(50, 0);
    } static LinkedList<Integer> list = new LinkedList<Integer>(); public static void split(int n, int base) {
    if (n == 0) {
    if(list.size() == 1)
    {
    return;
    }
    if( list.getLast() > 30)
    {
    return;
    }
    System.out.println(list);
    return;
    }
    for (int i = base + 1; i <= n; i++) {
    list.addLast(i);
    split(n - i, i);
    list.removeLast(); // 
    }
    }}
      

  5.   

    谢谢amdgaming,这个结果是我想要的,会给你分的哈
    不过我想看看还有没有其他算法了?晚会再结贴吧呵呵
      

  6.   

    简单的想法,在打印list时,取出list的末几个数(最多n位)大数在末尾,取过程中,一旦如果有大于范围的就不要此list,
    至于n的确定,也很简单,如1-100 的数由1-30来表示,n = 3
      

  7.   

    看 这个 帖子 6楼的回答  不是用递归的 
    效率 在某些时候是不错 

    跟你这个 差不多
    http://topic.csdn.net/u/20090925/23/cac629c6-3bdb-4422-afe4-3e2e88a97539.html