题目描述:
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
代码:
package lanqiao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
List<Integer> list=new ArrayList<Integer>();
int n=sc.nextInt();
dfs(1,list,n);
}
public static void dfs(int start,List<Integer> list,int n){
if(sum(list) == n){
System.out.print(n + "=");
for(int i = 0;i < list.size();i ++)
{
if(i != list.size() - 1)
{
System.out.print(list.get(i) + "+");
}else{
System.out.print(list.get(i));
}
}
System.out.println();
return; //返回上一级
}
if(sum(list) > n)
{
return;
}
for(int i = start;i < n;i ++)
{
list.add(i);
dfs(i,list,n);
list.remove(list.size() - 1);
}
}
public static int sum(List<Integer> list) {
int sum=0;
for(int i=0;i<list.size();i++) {
sum+=list.get(i);
}
return sum;
}
}