我有一个方程式在解决它时遇到麻烦。我的等式:
S1=O*P*M1/Y1
D1=N-S1
S2=(O-D1)*P*M2/Y2
D2=N-S2
S3=(O-D1-D2)*P*M3/Y3
D3=N-S3
...
我做了什么:
$S = array();
$M = array(30,31,30);
$Y = array(360,360,360);
$O = 30000;
$P = 0.3;
$N = 10509.74;
$D = array();
for($i=1; $i<=count($M); $i++){
if($i==1){
$S[1] = $O*$P*$M[1]/$Y[1];
$D[1] = $N - $S[1];
}
else{
for($k=2; $k<=count($M); $k++){
$S[$i] = ($O-$D[$k-1])*$P*$M[$k]/$Y[$k];
$D[$i] = $N - $S[$i];
}
}
}
print_r($S);
不知道我哪里做错了,或者我做错了。
答案 0 :(得分:0)
我很确定这是对的。如果没有,请更新您的问题以包括您的样本输入的预期输出。 (无论如何这样做可能不是一个坏主意。)
// Set up things that don't change as constants.
define('P', 0.3);
define('N', 10509.74);
// O doesn't change, but it's only used once on
// its own. We'll reuse it to store the ongoing
// value of (O-D1), (O-D1-D2), etc.
$O = 30000;
$M = array(30, 31, 30);
$Y = array(360, 360, 360);
$S = array();
$D = array();
for ($i = 0; $i < count($M); $i++) {
$S[$i] = $O * P * $M[$i] / $Y[$i];
$D[$i] = N - $S[$i];
$O -= $D[$i];
}
print_r($S);
Array
(
[0] => 750
[1] => 522.87338333333
[2] => 256.33483458333
)
如果您不需要完整的$D
数组,则可以完全删除它,只需使用$O -= N - $S[$i];
。这个问题并不完全清楚,所以我把它留在了。
精确度可能是一个问题,虽然所需的精确程度被忽略了所以我根本不打扰它。