题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。
输入格式
输入:待拆分的自然数n。
输出格式
输出:若干数的加法式子。
输入输出样例
输入1
7
输出1
1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static int sum;
static List<Integer> arr;
public static void main(String[] args) {
int num = new Scanner(System.in).nextInt();
arr = new ArrayList<Integer>();
dfs(num, 1);
}
static void dfs(int num, int head){
if(num == 0 && arr.size() != 1){
for (int i = 0; i < arr.size()-1; i++) {
System.out.print(arr.get(i));
System.out.print("+");
}
System.out.println(arr.get(arr.size()-1));
}
for(int i = head;i <= num;i++){
int n = num-i;
if(n < 0) continue;
arr.add(i);
dfs(n, i);
arr.remove(arr.size()-1);
}
}
}
深搜就完事了,记得输出要有序。