登录
立即注册
首页
>
绿虎论坛
>
历史版块
>
编程
>
PHP
>
讨论/求助
算法问题(应该算吧)
Fleer
@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|
隐藏机器人聊天
)
1
Fleer
@Ta
/ 2012-07-02 /
样
/
源
不要笑我,我数学真的很差…
2
Fleer
@Ta
/ 2012-07-02 /
样
/
源
不要笑我,我数学真的很差…
3
幻阳化翼
@Ta
/ 2012-07-02 /
样
/
源
写2个用户行分别记录用户上次签到的金币数和签到天数,如果签到天数小于30天,就获取上次的签到币数并乘1.05得到币数,然后将币数写入用户行,如果等于30天则直接获取上次的币数就行了!如果等于0天,则返回50币!用数据库和PHP写的!可能有其它更好的方法!没研究过算法,不会那东西!
4
Xia-Love
@Ta
/ 2012-07-02 /
样
/
源
$num=50;$i=1;where($i<=30){$num=$num*1.05;$i++;}echo $num;//如果第一天是50币的话,那么就是这样!
5
Fleer
@Ta
/ 2012-07-02 /
样
/
源
小李同学,你看错题了…
6
Curtion
@Ta
/ 2012-07-02 /
样
/
源
不就是数学上的的以50为首相,1.05为公差吗,n<=30,数学表达式:sn=na1+n(n-1)d/2=30*50+30*29/2*1.05=??? 数学不好,算不出来,方法就这样
7
Curtion
@Ta
/ 2012-07-02 /
样
/
源
楼主的php算错了
8
老虎会游泳
@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
9
老虎会游泳
@Ta
/ 2012-07-02 /
样
/
源
但是PHP是每天分步计算,30天后结果可能不是这样:因为金币的个数每天都要取整。
10
老虎会游泳
@Ta
/ 2012-07-02 /
样
/
源
至于楼主,你的币不是1.05倍递增吗,怎么成1.5了。
还有,你把赋初值放在循环里,你循环再多次结果还是50*1.5=75吧。
11
老虎会游泳
@Ta
/ 2012-07-02 /
样
/
源
另外,如果要求30天的总币数,使用等比数列前n项和公式:
Sn=[A1*(1-q^n)]/(1-q)
12
自在鬼
@Ta
/ 2012-07-03 /
样
/
源
这是E界的规则
添加新回复
回复需要
登录
。
An=A1*q^(n-1)
这是一个首项A1为50,公比q为1.05的等比数列,它的通项公式是
An=50*1.05^(n-1)
第30项为
A30=50*1.05^29=205.8
还有,你把赋初值放在循环里,你循环再多次结果还是50*1.5=75吧。
Sn=[A1*(1-q^n)]/(1-q)