这题就是搜……
注意设定maxn 要不然肯定爆 maxn=1*10^最大位数/2 1234..89-11121314这样的
Program aa;
const
maxn=1000000000000000;
var
n,t:longint;
a:array[1..15] of char;
procedure dfs(l,sum,res,bl:int64);
var
i,j:longint;
begin
if l=n then
begin
res:=res+bl*sum;
if res=0 then
begin
inc(t);
if t<=20 then
begin
for i:=1 to n-1 do write(i,' ',a[i],' ');
writeln(n);
end;
end;
exit;
end;
a[l]:='+';
dfs(l+1,l+1,res+bl*sum,1);
a[l]:='-';
dfs(l+1,l+1,res+bl*sum,-1);
a[l]:='.';
if sum<=maxn then
if l+1<=9 then
dfs(l+1,sum*10+(l+1),res,bl)
else
dfs(l+1,sum*100+(l+1),res,bl);
end;
begin
{ assign(output,'a.pas');
rewrite(output);
}
read(n);
t:=0;
dfs(1,1,0,1);
writeln(t);
// close(output);
end.