算法提高 自然数拆分

资源限制
时间限制: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;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_54537215/article/details/123874272