#include<fstream>
using namespace std;
int n=0;
char sign[11];
ifstream fin ("zerosum.in");
ofstream fout ("zerosum.out");
bool DFS(int level,int sum)//level表示层次,sum表示在计算level之前计算和
{
if(level==1)
{
sum=1;
DFS(level+1,sum);
}
else if(level==n+1)
{
if(sum==0)
{
for(int i=1;i<=n-1;i++)
{
fout<<i<<sign[i];
}
fout<<n<<endl;
}
return 0;
}
else
{
sign[level-1]=' ';
if(level==2)
{
sum=12;
DFS(3,12);
sum=1;
}
if(level>=3)
{
if(sign[level-2]=='+')
{
sum-=(level-1);
sum+=((level-1)*10+level);
DFS(level+1,sum);
sum+=(level-1);
sum-=((level-1)*10+level);
}
else if(sign[level-2]=='-')
{
sum+=(level-1);
sum-=((level-1)*10+level);
DFS(level+1,sum);
sum-=(level-1);
sum+=((level-1)*10+level);
}
}
sign[level-1]='+';
sum+=level;
DFS(level+1,sum);
sum-=level;
sign[level-1]='-';
sum-=level;
DFS(level+1,sum);
sum+=level;
return 0;
}
}
int main()
{
fin>>n;
int sum=0;
DFS(1,0);
return 0;
}
1 加了个 else if 分支
2 调了下顺序 ,你自己查看下代码,就知道了
在win下调试还是方便些 擦 ,惭愧
2263

被折叠的 条评论
为什么被折叠?



