爆搜吧,一个一个试过去就可以了,时间复杂度?数据挺小的,就不用管这种东西了。。。 。。。
#include<cstdio>
#include<cstdlib>
using namespace std;
char s[40];
int n,aaaa;
void aaa(int bu,int k,int num,int k1);
int main()
{
//freopen("zerosum.in","r",stdin);
//freopen("zerosum.out","w",stdout);
cin>>n;
for(int i=1,j=1;i<=n;j+=2,i++)
s[j]=i+'0';
aaa(1,0,1,1);
if(aaaa==0)cout<<endl;
return 0;
}
void aaa(int bu,int k,int num,int k1)
{
if(bu==n){
if(k1==1)k+=num;
else if(k1==2)k-=num;
if(k==0){for(int i=1;i<2*n;i++)
cout<<s[i];
cout<<endl;
aaaa=1;}
return ;
}
for(int i=1;i<=3;i++){
if(i==1){
s[bu*2]=' ';
aaa(bu+1,k,num*10+bu+1,k1);
}
else if(i==2){
s[bu*2]='+';
if(k1==1)aaa(bu+1,k+num,bu+1,1);
else aaa(bu+1,k-num,bu+1,1);
}
else {
s[bu*2]='-';
if(k1==1)aaa(bu+1,k+num,bu+1,2);
else aaa(bu+1,k-num,bu+1,2);
}
}
}