一个小算法题

题目很简单, 如图所示:

PS C:/> s-x 1
x
PS C:/> s-x 2
x x
 x
x x
PS C:/> s-x 3
x x   x x
 x     x
x x   x x
   x x
    x
   x x
x x   x x
 x     x
x x   x x

 

当n = 1时, 输出一个"x", 如果n = 2的话, 就输出

x x

 x

x x

 

以此类推. 下面附上利用递归下降方式编写的PowerShell版本:

 

function vo($vx = '', $hx = '', $cur, $total) {

    if ($cur -eq 1) {

        if ($vx -eq $hx) {

            Write-Host -No "x";

        }

        else {

            Write-Host -No " ";

        }

        return;

    }

    for ($i = 1; $i -le 3; $i++) {

        $t = $hx

        vo ($vx) ([string]$t + ($i % 2)) ($cur - 1) $total

    }

}

 

function ho($vx = 1, $hx = 1, $cur, $total) {

    if ($cur -eq 1) {

        for ($i = 1; $i -le 3; $i++) {

            vo ($vx) ($hx) $total $total

""

            return;

        }

    }

    for ($i = 1; $i -le 3; $i++) {

        $t = $vx

        ho  ([string]$t + ($i % 2)) ($hx) ($cur - 1) $total

    }

}

 

function s-x($i = 3) {

    if ($i -gt 10) { Write-Warning "Too large"; return }

    if ($i -lt 1) { Write-Warning "Must be a positive number"; return }

    ho -cur $i -total $i

}

 

下面给出n = 4的结果:

PS C:/> s-x 4
x x   x x         x x   x x
 x     x           x     x
x x   x x         x x   x x
   x x               x x
    x                 x
   x x               x x
x x   x x         x x   x x
 x     x           x     x
x x   x x         x x   x x
         x x   x x
          x     x
         x x   x x
            x x
             x
            x x
         x x   x x
          x     x
         x x   x x
x x   x x         x x   x x
 x     x           x     x
x x   x x         x x   x x
   x x               x x
    x                 x
   x x               x x
x x   x x         x x   x x
 x     x           x     x
x x   x x         x x   x x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值