野兔&乌龟计算

时间:2013-08-19 13:32:06

标签: php algorithm function

我有2个配置文件的数据,我想比较。

每个配置文件都有一个'总积分'值和一个'每日积分'值,我想计算野兔超过乌龟需要多少天。

$hare_points = 10000;
$hare_ppd = 700;

$tortoise_points = 16000;
$tortoise_ppd = 550;

确定野兔赶上乌龟需要多少天的最有效方法是什么?我的第一个过程是运行一个循环来计算整天,但很快就意识到必须有一个有效的算法,不想破坏它在lol上运行的服务器

2 个答案:

答案 0 :(得分:2)

这是一组简单的方程式来解决。

hare_total = hare_points + hare_ppd * days
tortoise_total = tortoise_points + tortoise_ppd * days

你试图找出积分相同的那一天,所以:

hare_total = tortoise_total
hare_points + hare_ppd * days = tortoise_points + tortoise_ppd * days
hare_points - tortoise_points = (tortoise_ppd - hare_ppd) * days

所以有你的答案:

$days = ($hare_points - $tortoise_points) / ($tortoise_ppd - $hare_ppd)

只需将其插入到您的函数中,然后向上/向下舍入到整数,具体取决于您想要解释答案的方式。

答案 1 :(得分:2)

假设ppd是每天的分数:

<?php
$hare_points = 10000;
$hare_ppd = 700;

$tortoise_points = 16000;
$tortoise_ppd = 550;

$hare_diff = $tortoise_points - $hare_points;
$hare_ppd_diff = abs($tortoise_ppd - $hare_ppd);
$days = $hare_diff/$hare_ppd_diff;
echo $days; // 40

/* Test:
 * 40 * 700 = 28000; hare
 * 40 * 550 = 22000; tortoise
 * 
 * hare_p = 28000 + 10000 = 38 000
 * toit_p = 22000 + 16000 = 38 000
 * 
 * So the math is right. On 40th day, they are equal
 * 
 */