把一个数分解成任意几个数之和
程序员文章站
2024-02-03 16:49:28
...
例如:4的结果有,(1+3),(2+2),(1+1+2),(1+1+1+1)
public class Demo {
// 存储每次分割的值
static int[] arr;
// 需要分割的值
static int num = 4;
public static void main(String[] args) {
// 分割的值最多分成1+1+...+1 最多就是他本身的长度
arr = new int[num];
search(num,1,0);
}
/**
* 计算
* @param n 需要计算的数
* @param s 需要拆分的最小数
* @param x 分割存储的下标
*/
private static void search(int n, int s, int x) {
// 当需要计算的数大于0的时候才开始计算
if(n>0) {
for(int i=s;i<=n;i++) {
// 存储本次分割出的值
arr[x]=i;
// 计算分割剩余的值 同时存储的下标+1
search(n-i,i,x+1);
}
return;
}
// 如果分割的值和分割出来的第一个值相同时 说明该值不可分割 不进行输出
if(num != arr[0])
System.out.print(num+"="+arr[0]);
// 循环把分割出来的数组拼接
for(int i=1;i<x;i++) {
System.out.print("+"+arr[i]);
}
//换行
System.out.println();
}
}