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
if (array.size() == (size - 1)) {
array.add(sum); // 想要的数组
print(array);
count++;
} else {
for (int i = 0; i <= sum; i++) {
ArrayList
subarray.addAll(array);
subarray.add(i);
int subsum=sum-i;
subNaturalNumber(subsum, subarray, size);
}
}
}
public static void main(String[] args) {
ArrayList
subNaturalNumber(16, list, 14);//计算函数,16分解成14个数字,其他请自行修改参数
System.out.println(count);//统计多少种结果
}
}
//由于运行时间较长,结果只截部分。最后16的14项分解共67863915种,15的14项分解共37442160种。
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种分法。
这得用一个递归算法,具体的我还在想 真的很难啊
小伙子可以去淘宝上买,有程序猿帮你写的