我有一个问题需要计算一些'幸运门票',其中每张门票有6个号码,而'幸运'门票将有前3个数字的总和等于第二个3个数字的总和。我知道这个问题可以通过使用一些代数公式来解决,但不幸的是我不知道代数,所以我想通过强力解决它 - 制作2个数组,求和它们并相互比较:
<?php
$intitial_number = 999999;
$A = array();
$B = array();
for(;$intitial_number > 0; $intitial_number--) {
$string = (string)$intitial_number;
$len = strlen($string);
for($i = 0; $i < 3; $i++) {
$A[] = $string[$i];
}
for($i = 3; $i < 6; $i++) {
$B[] = $string[$i];
}
if (array_sum($A) == array_sum($B)) echo 'Ok';
}
?>
当我尝试运行它时,我得到:
确定致命错误:第26行的/Applications/MAMP/htdocs/Exersize/LuckyTicket.php超出了30秒的最长执行时间
我的错误是什么?甚至可以像这样解决它吗?
谢谢!
答案 0 :(得分:1)
在php.ini中添加或编辑此行
max_execution_time = 0
或者只需在LuckyTicket.php文件的顶部添加以下行:
ini_set('max_execution_time',0);
答案 1 :(得分:1)
你只需要数数吧? 1,2,3,4,...,999中的数字之和是三角形数字:
我在javascript中这样做只是因为:)
for (i=0; i<1000; i++) {
a[Math.floor(i/100)+(Math.floor(i/10)%10)+i%10] ++;
}
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 63, 69, 73, 75, 75, 73, 69, 63, 55, 45, 36, 28, 21, 15, 10, 6, 3, 1]
Then you just square the numbers to get the total:
1*1 + 3*3 + ...
s = 0;
for (i=0; i<28; i++) { s += a[i]*a[i] }
= 55252.
纯!
答案 2 :(得分:1)
你走了。
$tickets = array();
for($intitial_number = 0; $intitial_number < 1000000; $intitial_number++) {
$int = str_pad($intitial_number, 6, '0', STR_PAD_LEFT);
$split = str_split($int);
if(($split[0] + $split[1] + $split[2]) == ($split[3] + $split[4] + $split[5])){
$tickets[] = $int;
}
}
print_r($tickets); // List ticket Numbers
echo count($tickets); // Number of lucky tickets.