算式等式

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

题目

Description
给你N个数字,每个数字均不相同,你可以取其中任意个数字相加,如果所得到的结果在给出的数列
中也能找到,则输出这个等式
Input
第一行一个数字N
接下来N个数字

Output
输出你找到的等式,注意看样例的输出格式
Sample Input
6
1 3 5 7 8 9
Sample Output
1+7=8
1+8=9
3+5=8
1+3+5=9

题解

#include<iostream>
using namespace std;
int n,m,a[1000],tot[1000];
void dfs(int dep,int cnt,int sum)
{
    if(dep==m+1)
    {
        bool cmp=false;
        for(int i=1;i<=n;i++)
            if(sum==a[i])
            {
                cmp=true;
                break;
            }
            if(cmp==true)
            {
                for(int i=1;i<=m;i++)
                    if(i<m)
                        cout<<tot[i]<<"+";
                    else
                        cout<<tot[i]<<"="<<sum<<endl;
            }
            return;
        }
        for(int i=cnt;i<=n;i++)
            if(sum+a[i]<=a[n])
            {
                tot[dep]=a[i];
                dfs(dep+1,i+1,sum+a[i]);
            }
}
int main()
{      
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(m=2;m<=n-1;m++)
        dfs(1,1,0);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Tangwan_jeff/article/details/95326561
今日推荐