我开始解决 codeabbey.com 问题,并且遇到了这个问题。 我也正在尝试学习面向对象的PHP编码方式,我希望它不会非常难以阅读。
<小时/> 我遇到的问题:
我在这里做错了吗?我不确定为什么它适用于单个值,但是当我通过数组循环时它会保持超时。
我希望我很清楚,请提出任何问题,以便我可以编辑这篇文章。 谢谢!
我不能发布两个以上的链接,所以我猜你可以使用自己的语法着色。
<?php
class Input { // Reading input file from codeabbey (in this case from 'std' file on my pc)
public $first_line = null; // I am using this class in every problem on the site so its more complicated
public $data = null; // than required for this problem
public function __construct($input) { // Puting 1st line (helper) in $firstline and rest of array in $data
$input = file_get_contents($input);
$input = explode("\n", $input);
$this->first_line = $input[0];
array_shift($input);
$this->data = $input;
}
public function toIntegers() { // Convert strings from array in integers
$data = $this->data; // Didn't use this for this problem
foreach ($data as $key=>$value) {
$data[$key] = (int)$value;
}
$this->data = $data;
}
}
class Fibonacci { // Creating Fibonacci array and counting steps for problem
private $data;
public $hits = array();
public function __construct($input) { // Loading input array in class
$this->data = $input;
}
public function createFibonacci($number) { // Function: Creating fibonacci array until it reaches certain number
$fibonacci = array(0,1); // Argument: Limit number up to which array is created
$a = true; // Return: Fibonacci array
$count = 0;
while ($a) {
$length = count($fibonacci);
$count++;
$fibonacci[] = bcadd($fibonacci[$length-1], $fibonacci[$length-2]);
if ($fibonacci[$length-1] == $number) {
echo "found match as $count for number $number<br>";
$this->hits[] = $count;
$a = false;
}
if ($count > 2000) {
$a = false;
echo 'timed! <br>';
}
}
}
public function countIndex() { // Function: counting index at which given number occured
foreach ($this->data as $key => $value) { // Arguments: --
$this->createFibonacci($value); // Return: index number for each number in array
}
}
}
$input = new Input('std');
$data = $input->data;
$fibonacci = new Fibonacci($data);
$fibonacci->countIndex();
答案 0 :(得分:0)
我刚刚找到的人......这只是太大而无法处理的数字:)
键入时:echo PHP_INT_MAX; 它将返回您在服务器上可以处理的最大整数(由于显而易见的原因,64位可以处理超过32位)。
在我的系统上(32位wamp):PHP_INT_MAX返回2147483647 并且列表中的所有数字都大于此数字,除了找到的数字63245986。
查看数字太大时会发生什么:Integer Overflow示例。 http://php.net/manual/en/language.types.integer.php
答案 1 :(得分:0)
所以解决方案(非常愚蠢):
因为我试图在新文件上做一些foreach循环和事情,我不小心注意到我的输入数组的var_dump给出的字符串长度比应该的+1 ...原来我在每一行的末尾都有当我用“/ n”爆炸文件时也是如此。使用我的编辑器(Netbeans)复制粘贴东西。
只需将“/ n”更改为“/ r”,文件就可以顺利运行。
public function __construct($input) { // Puting 1st line (helper) in $firstline and rest of array in $data
$input = file_get_contents($input);
$input = explode("\r", $input); // CHANGE \R INSTEAD OF \N
$this->first_line = $input[0];
array_shift($input);
$this->data = $input;
}
在 codeabbey.com 上,输入“\ n”适用于他们的php:// stdin文件。