PHP赛事蛇形编排法实现

// 蛇形编排

    public function snake()

    {

        $n = 5;

        if ($n % 2 == 0) {

            $count = range(1, $n - 1);

            $lun = $n - 1;

            $bu = $n;

        } else {

            $count = range(1, $n);

            $lun = $n;

            $bu = 0;

        }

        $tmp = $count;

        for ($i = 0; $i < $n / 2; $i++) {

            foreach ($tmp as $v) {

                array_push($count, $v);

            }

        }

        // 中间数

        $middle = ceil($n / 2);

        // 一半是多少

        $half = $middle - 1;

        for ($i = 1; $i <= $lun; $i++) {

            // 输出第几轮

            echo '第' . $i . '轮</br>';

            // 偶数轮,补值在上方左侧

            if ($i % 2 == 0) {

                echo $bu . '---' . $count[$middle * $i - 1] . '</br>';

            }

            if ($i == 1) {

                for ($l = 0; $l < $half; $l++) {

                    $leftArr[$l] = $count[$l];

                }

                for ($r = 0; $r < $half; $r++) {

                    $rightArr[$r] = $count[$lun - 1 - $r];

                }

            } else {

                // 单数轮逆向取值

                if ($i % 2 == 1) {

                    for ($r = 0; $r < $half; $r++) {

                        $rightArr[$r] = $count[$middle * $i - 1 + $half - $r];

                    }

                } else {

                    for ($r = 0; $r < $half; $r++) {

                        $rightArr[$r] = $count[$middle * $i + $r];

                    }

                }

            }

            for ($b = 0; $b < $half; $b++) {

                echo $leftArr[$b] . '---' . $rightArr[$b] . '</br>';

            }

            // 奇数轮,补值在下方右侧

            if ($i % 2 != 0) {

                echo $count[$middle * $i - 1] . '---' . $bu . '</br>';

            }

            // 右边数组给左边数组

            $leftArr = $rightArr;

        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值