是否可以强行购买幸运票?

时间:2013-04-01 15:24:09

标签: php arrays

我有一个问题需要计算一些'幸运门票',其中每张门票有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秒的最长执行时间

我的错误是什么?甚至可以像这样解决它吗?

谢谢!

3 个答案:

答案 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.