php 反向截取,反向PHP功能

我有一个根据用户的经验返回用户级别的函数.我将如何扭转这种状况,以便我可以输入级别并获得该级别所需的经验?

function getLevel($experience)

{

return round ( sqrt( pow($experience, 1.4) - 1.5*$experience +1) /100 );

}

function getExperienceByLevel($level)

{

return ???;

}

到目前为止,这是我使用常规数学所做的.因为我知道$level,所以我希望表达式像$experience = XXXX.

$level = sqrt( pow($experience, 1.4) - 1.5*$experience +1) /100;

$level*100 = sqrt( pow($experience, 1.4) - 1.5*$experience +1);

pow($level*100, 2) = pow($experience, 1.4) - 1.5*$experience + 1;

解决方法:

我们需要在这里做一些代数.级别的公式是

lvl = floor( sqrt( expr^1.4 - 1.5*expr +1) / 100 + 0.5)

向后考虑

lvl = sqrt( expr^1.4 - 1.5*expr +1) / 100 + 0.5

然后

lvl - 0.5 = sqrt( expr^1.4 - 1.5*expr +1) / 100

100 * lvl - 50 = sqrt( expr^1.4 - 1.5*expr + 1)

广场

10000 * lvl^2 - 10000 * lvl + 2500 = expr^1.4 - 1.5*expr + 1

10000 * lvl^2 - 10000 * lvl + 2499 = expr^1.4 - 1.5*expr

现在让左手边Q,我们有

expr^1.4 - 1.5*expr = Q

这实际上是一个很难求解的代数方程.忽略线性部分即可得到一个近似值,从而得到更简单的方程

expr^1.4 = Q

给予

expr = pow(Q, 1/1.4)

这实际上告诉我们,最好用数字方法求解.您也可以构造一个查询表.一个简单的方法是

int[] exprForLevel

function generateExprsForLevel() {

curLevel = 1

expForLevel[1] = 0

for(i=0; i< MaxPossibleExperience; ++i) {

lvl = getLevel(i)

if(lvl > curLevel) {

curLevel = lvl

expForLevel[curLevel] = i

}

}

function getExperienceByLevel(level) {

return expForLevel[level]

}

上面的伪代码效率很低,因为它检查每个可能的体验值.如今,计算机的效率相当高,因此您可能会发现它拥有高达数百万的使用经验.您可能会发现涉及二进制细分的例程应该更快地收敛到值.

标签:php,math

来源: https://codeday.me/bug/20191026/1938078.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值