1 solutions

  • 0
    @ 2025-11-5 17:51:19

    C++ :

    #include <iostream>
    using namespace std;
    #define Max 100
    int n,m;//n个数中选出若干数,总和为m
    int v[Max];//标记n个数是否被选,1选,0不选
    void f(int k,int sum)
    {
    	int i;
    	if(k>n||sum<0) return;//剪枝
    	if(sum==0)
    	{
    		for(i=0;i<k;i++)
    			if(v[i]) cout<<i+1<<' ';
    		cout<<endl;
    		return;
    	}	
    	v[k]=0;//不选第k号
    	f(k+1,sum);//递归
    	v[k]=1;//选第k号
    	f(k+1,sum-k-1);//递归
    }
    int main()
    {
    	cin>>n>>m;
    	f(0,m);
        return 0;
    }
    
    
    • 1

    Information

    ID
    18631
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By