版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (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;
}