算法问题(应该算吧)

@Ta 2012-07-02 4116点击
问题:某网站的签到奖励规则如下:设置基础值:50币 每日递增:1.05倍币 递增上限:30天 怎么分别用PHP 和数学求30天后的币数奖励?PHP的计算方式如下: <?php
for($i=1;$i<=30;$i++)
{
 $num=50; 
$bs=1.5;
 $num=$num*$bs;
 } echo "$num"; 
?> 可是怎么用数学算式得出这个结果呢?
回复列表(12|隐藏机器人聊天)
  • @Ta / 2012-07-02 / /
    不要笑我,我数学真的很差…
  • @Ta / 2012-07-02 / /
    不要笑我,我数学真的很差…
  • @Ta / 2012-07-02 / /
    写2个用户行分别记录用户上次签到的金币数和签到天数,如果签到天数小于30天,就获取上次的签到币数并乘1.05得到币数,然后将币数写入用户行,如果等于30天则直接获取上次的币数就行了!如果等于0天,则返回50币!用数据库和PHP写的!可能有其它更好的方法!没研究过算法,不会那东西!
  • @Ta / 2012-07-02 / /
    $num=50;$i=1;where($i<=30){$num=$num*1.05;$i++;}echo $num;//如果第一天是50币的话,那么就是这样!
  • @Ta / 2012-07-02 / /
    小李同学,你看错题了…
  • @Ta / 2012-07-02 / /
    不就是数学上的的以50为首相,1.05为公差吗,n<=30,数学表达式:sn=na1+n(n-1)d/2=30*50+30*29/2*1.05=???  数学不好,算不出来,方法就这样
  • @Ta / 2012-07-02 / /
    楼主的php算错了
  • @Ta / 2012-07-02 / /
        等比数列{An}的通项公式是
        An=A1*q^(n-1)
        这是一个首项A1为50,公比q为1.05的等比数列,它的通项公式是
        An=50*1.05^(n-1)
        第30项为
        A30=50*1.05^29=205.8
  • @Ta / 2012-07-02 / /
    但是PHP是每天分步计算,30天后结果可能不是这样:因为金币的个数每天都要取整。
  • @Ta / 2012-07-02 / /
    至于楼主,你的币不是1.05倍递增吗,怎么成1.5了。
    还有,你把赋初值放在循环里,你循环再多次结果还是50*1.5=75吧。
  • @Ta / 2012-07-02 / /
    另外,如果要求30天的总币数,使用等比数列前n项和公式:
        Sn=[A1*(1-q^n)]/(1-q)
  • @Ta / 2012-07-03 / /
    这是E界的规则
添加新回复
回复需要登录