资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
HJQ同学发现了一道数学题,要求n拆分成若干自然数和的方案
输入格式
输入n
输出格式
输出n拆分成若干自然数和的方案,每个方案一行
数据规模和约定
n <= 10
经典的def题目:
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) {
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 ;//返回上一级dfs
}
if(sum(list)>n)
{
return;//这一级dfs已经结束了,返回上一级
}
for(int i=start;i<n;i++) {
//i=start保证由小到大输出
list.add(i);
dfs(i,list,n);//开始传入i保证虽然list成员相同但是顺序不同的重复
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;
}
}