这题就是搜……
注意设定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.