Pascal程序笔迹:和为零

来源:互联网 发布:可以赚钱的app软件 编辑:程序博客网 时间:2024/05/20 01:36

<Pascal笔迹>>>和为零

作者:A_Ender


[题目介绍]

有n个数,分别是1,2..n,要你用加减或什么都不干,来使整个连起来的算式和为零。

[样例输入,输出]

输入1:5

输出1:1 2-3-4-5

输入2:6

输出2:1 2+3-4-5-6

[题目数据]

16>n>0


{本题套路}

搜索快线直通答案,注意可以什么都不干。

{算法详解}

{1}2到n个符号全部搜一遍(for i:=1 to 3 do)分别是空,+,-,然后调用和回溯。

{2}到n+1了判断是否为0。(当然你在n最后的if的时候也可以判断)


{算法演示}

回溯太难演示了(前几次我还有点耐心),还是看下图吧。

1    |

(  )(+)(--)      |

2    |

(  )(+)(--)      |

3    \/

得出:1+2-3=0




<代码实现>

var
        n,i:longint;
        a,b:array[1..1000] of longint;
function sc:longint;
var
        b,c,i,k:longint;
begin
        b:=1;
        c:=0;
        k:=2;
        for i:=2 to n+1 do
        begin
                case a[i] of
                        1:b:=b*10+i;
                        2,3:begin
                                if k=2 then c:=c+b else c:=c-b;
                                k:=a[i];
                                b:=i;
                        end;
                end;
        end;
        sc:=c;
end;
procedure dg(x:longint);
var
        i:longint;
begin
        if x>n then
        begin
                if sc=0 then
                begin
                        write(1);
                        for i:=2 to n do
                        begin
                                if a[i]=1 then
                                        write(' ');
                                if a[i]=2 then
                                        write('+');
                                if a[i]=3 then
                                        write('-');
                                write(i);
                        end;
                        writeln;
                end;
        end
        else
        begin
                for i:=1 to 3 do
                begin
                        a[x]:=i;
                        dg(x+1);
                        a[x]:=0;
                end;
        end;
end;
begin
        read(n);
        a[n+1]:=2;
        dg(2);
end.

原创粉丝点击