1031. 【USACO题库】2.3.3 Zero Sum和为零

题目描述

请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N。

现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将每一对数字组合在一起(请不在第一个数字前插入符号)。

计算该表达式的结果并注意你是否得到了和为零。

请你写一个程序找出所有产生和为零的长度为N的数列。

输入

单独的一行表示整数N (3 <= N <= 9)。

输出

按照ASCII码的顺序,输出所有在每对数字间插入“+”, “-”, 或 “ ”后能得到和为零的数列。(注意:就算两个数字之间没有插入符号也应该保留空格)

样例输入

7

样例输出

1+2-3+4-5-6+7

1+2-3-4+5+6-7

1-2 3+4+5+6+7

1-2 3-4 5+6 7

1-2+3+4-5+6-7

1-2-3-4-5+6+7

数据范围限制


淼淼淼淼!
递归枚举符号,判断符号是否合法,AC!
注意对于空格的处理,会比较繁琐。
然后就没有然后了。
代码(请勿抄袭):
var
        i,j,k,m,n,o,p,l:longint;
        a:array[0..10] of longint;
function pd:boolean;
var
        i,k,answer,len,len1:longint;
        s,t:string;
        b,fh:array[0..10] of longint;
begin
        s:='';
        i:=1;
        if a[1]=3 then answer:=0 else answer:=1;
        repeat
                k:=a[i];
                if (i=1) and (a[i]=3) then k:=1;
                if (i<>1) or (a[i]<>3) then inc(i);
                str(i,s);
                while a[i]=3 do begin
                        inc(i);
                        str(i,t);
                        s:=s+t;
                end;
                val(s,len);
                if k=1 then inc(answer,len) else dec(answer,len);
        until i=n;
        if answer=0 then exit(true) else exit(false);
end;
procedure dg(t:longint);
var
        i:longint;
begin
        if t>n-1 then begin
                if pd then begin
                        for i:=1 to n-1 do begin
                                write(i);
                                case a[i] of
                                        1:write('+');
                                        2:write('-');
                                        3:write(' ');
                                end;
                        end;
                        write(n,' ');
                        writeln;
                end;
        end else begin
                a[t]:=3;dg(t+1);a[t]:=0;
                a[t]:=1;dg(t+1);a[t]:=0;
                a[t]:=2;dg(t+1);a[t]:=0;
        end;
end;
begin
        assign(input,'zerosum.in');reset(input);
        assign(output,'zerosum.out');rewrite(output);
        readln(n);
        dg(1);
        close(input);close(output);
end.

猜你喜欢

转载自blog.csdn.net/wangyuda123456789/article/details/77017507