PHP面试题狼与兔子,假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环,选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞 求多少天后, 兔子与狼在一个洞里

题目如下:

假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环(如图)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2E0Njc1NDMy,size_16,color_FFFFFF,t_70

选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞

求多少天后, 兔子与狼在一个洞里。

请将该函数补充完成: function ($N, $l, $k)

分析

这种图应该叫约瑟夫环,其实可以简单化,就从0号洞一起开始走,假如狼走的快,兔子走的慢,那狼肯定走在前面,如果狼走几天后绕一圈回来,就得重新开始追兔子(不是重新从起点开始追)即相当于狼在兔子的后面,所以狼此时的洞数就得减去一圈,即N。兔子同理,如此反复,直到兔子和狼的洞数相同。上代码

<?php
function runTest($N, $l, $k){

    $day = $wolf = $rabbit = 0;

    while(true){
        $day++;

        $rabbit = ($rabbit + $l) % $N;//这里用的取余的方式将兔子和狼的步数重置,也可以用注释中的
        $wolf = ($wolf + $k) % $N;

//        $rabbit = $rabbit + $l;
//        $wolf = $wolf + $k;
//        if($rabbit / $N > 1) $rabbit = $rabbit - $N;
//        if($wolf / $N > 1) $wolf = $wolf - $N;

        if($rabbit == $wolf) break;
    }

    return $day;
}

echo runTest($argv[1], $argv[2], $argv[3]);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值