组合

#include<iostream>
#include<cmath>
using namespace std;
int a[21], b[21];
int sum=0;
int fun(int n,int m,int M)
{
    for(int i=n;i>=m;i--)
    {
        b[m]=i;//用数组把每组数的下标存起来

        if(m==1)//当m等于1,即满足M个数时
        {
            for(int i=M;i>0;i--)
            {
                if(i==1)
                cout<<a[b[i]];
                else
                    cout<<a[b[i]]<<"+";
                sum+=a[b[i]];//把选出来的数累加
            }
            cout<<"="<<sum<<endl;
            sum=0;
        }
        else
            fun(i-1,m-1,M);//递归选数
    }
    return 0;
}

int main()
{
    int n,M;
    cin>>n>>M;
    int m=M;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    fun(n,m,M);
    return 0;
}
原文地址:https://www.cnblogs.com/ZCWang/p/12507497.html