1 条题解

  • 0
    @ 2025-2-14 21:09:17

    C++ :

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<queue>
    #include<string>
    #include<fstream>
    int n;
    int a[10001];
    int print(int x)
    {
    	for(int i=1;i<=x-1;++i)
    	{
    		printf("%d+",a[i]);
    	}
    	printf("%d\n",a[x]);
    }
    int search(int sum,int t)
    {
    	for(int i=a[t-1];i<=sum;++i)
    	{
    		if(i<n)
    		{
    			a[t]=i;
    			sum=sum-i;
    			if(sum==0)
    			{
    				print(t);
    			}
    			else
    			{
    				search(sum,t+1);
    			}
    			sum=sum+i;
    		}
    	}
    }
    using namespace std;
    int main()
    {
    	cin>>n;
    	a[0]=1;
    	search(n,1);
    	return 0;
    }
    

    Pascal :

    var n:longint;
        a:array[0..10000] of longint;
    procedure dfs(t,sum:longint);
    var i:longint;
    begin
      if sum=n then
      begin
        if a[1]<>n then
        begin
        write(a[1]);
        for i:=2 to t-1 do write('+',a[i]);
        writeln;
        end;
        exit;
      end;
      for i:=a[t-1] to n-sum do
      begin
        a[t]:=i;
        dfs(t+1,sum+i);
      end;
    end;
    begin
      readln(n);
      a[0]:=1;
      dfs(1,0);
    end.
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while (in.hasNextInt()) {
    			int n = in.nextInt();
    			int[] list = new int[n];
    			trackBack(1, list, 0, n, 0, 0);
    		}
    	}
    
    	public static void trackBack(int curNum, int[] list, int before, int n,
    			int sum, int index) {
    		for (int i = 1; i < n; i++) {
    			if (i < before && index != 0)
    				continue;
    			if (index >= n)
    				continue;
    			list[index] = i;
    			if (sum + i == n) {
    				System.out.print(list[0]);
    				for (int k = 1; k <= index; k++)
    					System.out.print("+" + list[k]);
    				System.out.println();
    				// continue;
    			}
    			trackBack(curNum + i, list, i, n, sum + i, index + 1);
    		}
    	}
    }
    
    • 1

    信息

    ID
    666
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者