请用java语言设计一个程序完成如下要求

2025-03-06 22:15:53
推荐回答(4个)
回答1:

import java.util.ArrayList;
import java.util.List;

public class SubNumber {
    public static void print(List list){
        for(int i = 0;i < list.size(); i ++){
            if(i==0){
                System.out.print(list.get(i));
            }else{
                System.out.print("\t"+list.get(i));
            }
        }
        System.out.println();
    }
    static int count=0;

    public static void subNaturalNumber(int sum, ArrayList array, int size) {
        if (array.size() == (size - 1)) {
            array.add(sum); // 想要的数组
            print(array);
            count++;
        } else {
            for (int i = 0; i <= sum; i++) {
                ArrayList subarray = new ArrayList();
                subarray.addAll(array);
                subarray.add(i);
                int subsum=sum-i;
                subNaturalNumber(subsum, subarray, size);
            }
        }

    }

    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        subNaturalNumber(16, list, 14);//计算函数,16分解成14个数字,其他请自行修改参数
        System.out.println(count);//统计多少种结果
    }

}

//由于运行时间较长,结果只截部分。最后16的14项分解共67863915种,15的14项分解共37442160种。


回答2:

import java.util.Arrays;

public class Q {

  public static void main(String[] args) {
    split(16, 14);
    System.out.println();
    split(15, 14);
  }

  public static void split(int m, int n) {
    if (m < 0) {
      throw new IllegalArgumentException("参数m不能小于0。");
    }
    if (n <= 0) {
      throw new IllegalArgumentException("参数n不能小于等于0。");
    }

    int[] a = new int[n];
    int count = split(m, 0, a);
    System.out.printf("共有%d种分法。\n", count);
  }

  public static int split(int m, int n, int[] a) {
    if (n == a.length - 1) {
      a[n] = m;
      System.out.println(Arrays.toString(a));
      return 1;
    }

    int count = 0;
    for (int i = m; i >= 0; i--) {
      a[n] = i;
      count += split(m - i, n + 1, a);
    }
    return count;
  }
}

16分解为14项相加,共有67863915种分法。

15分解为14项相加,共有37442160种分法。

回答3:

这得用一个递归算法,具体的我还在想 真的很难啊

回答4:

小伙子可以去淘宝上买,有程序猿帮你写的