Pascal程序笔迹:和为零

<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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值