典型的代码(汉诺塔等)

1、汉诺塔:打印出每一步做的操作和总行数;

//汉诺塔问题处理;
function HanNuoMove($n, $a, $b, $c, &$line)
{
    if(1 === $n){
    echo $line .'::'. $a .'->'. $c .'<br>';
    $line++;
    }else{
    HanNuoMove($n - 1, $a, $c, $b, $line);
    echo $line .'::'. $a .'->'. $c .'<br>';
    $line++;
    HanNuoMove($n - 1, $b, $a, $c, $line);
    }
}

$line = 1;
HanNuoMove(5, 'a', 'b', 'c', $line);


2、猴子选大王:返回猴子王编号;

function getMonkeyKing($n, $m)
{
    //初始化当前数数的位置和monkeys数组;
    $curr = 0;
    $arr = range(1, $n, 1);

    //遍历到只剩最后一个;
    $i = 0;
    while(count($arr) > 1){
        //($i+1)是猴子的位置,比如下标为0的是第一个;
        if(0 == ($i+1)%$m){
            unset($arr[$i]);
        }else{
            //没有被选中的猴子,添加到数组最后,并删除当前位置;
            $arr[] = $arr[$i];
            unset($arr[$i]);
        }
        
        $i++;
    }

    return array_shift($arr);
}

echo '猴子王是第'.getMonkeyKing(100, 9).'只候!';


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值