我得到了解决方案;但是,我觉得代码非常糟糕。这是在我使用任何编程语言的前50个小时内...请耐心等待。
问题:
Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是: 1,2,3,5,8,13,21,34,55,89 ...... 通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。
我的解决方案:
<?php
//if number is odd, returns false
function setOddsZero($n) {
$test = ($n&1); //0 = even, 1 = odd
if($test == 1) {
return false;
} else {
$n = $n;
}
}
$numbers=array(1,);
for($i>0; $i<=100; $i++) {
$numbers[$i] += (($numbers[$i-2])+($numbers[$i-1]));
if (($numbers[$i]) >= 4000000) {
echo $total;
die;
} else {
if((setOddsZero($numbers[$i]))===false) {
$total += 0;
}else {
$total += $numbers[$i];
}
}
}
?>
答案 0 :(得分:3)
这是我使用for循环的解决方案:
$a = 0;
$b = 1;
$p = 0;
$limit = 4000000;
for($i=0; $p < $limit; $i++) {
$sum = $a+$b;
$a = $b;
$b = $sum;
// Checks if $a is a multiple of 2
if($a%2 == 0) {
$p += $a;
}
}
echo $p;
答案 1 :(得分:2)
无需记住所有数字。
$num0 = 1;
$num1 = 1;
$num2 = 0;
$odd = 0;
do
{
//The way you count recurents in cycles
$num2 = $num1 + $num0;
$num0 = $num1;
$num1 = $num2;
//Classic check wheter the number is odd o even
if($num2 % 2 == 1)
$odd++;
} while($num2 < 4000000);
答案 2 :(得分:1)
$fibos = array(1,2);
$sum_of_evens = 0;
while ($fibos[1] < 4000000)
{
$fibos []= array_shift($fibos) + $fibos[0];
$sum_of_evens += ($fibos[1] & 1 == 0) ? $fibos[1] : 0;
}
echo $sum_of_evens;
meze所建议的
$prevprev = 1;
$prev = 2;
$sum_of_evens = 0;
while ($prev < 4000000)
{
list($prevprev, $prev) = array($prev, ($prevprev + $prev));
$sum_of_evens += ($prev & 1 == 0) ? $prev : 0;
}
编辑:修改代码以使用& 1
代替% 2
,参见this thread at devshed 的
答案 3 :(得分:-4)
PHP是一种设计糟糕的语言。我想你正在学习它,因为你想从事服务器端的网络编程。请查看rails和django。