0

我有一个问题需要计算“幸运票”的数量,其中每张票有 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 秒的最大执行时间

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

谢谢!

4

3 回答 3

1

在 php.ini 中添加或编辑这一行

max_execution_time = 0

或者只需在 LuckyTicket.php 文件的顶部添加以下行:

ini_set('max_execution_time', 0);

于 2013-04-01T15:33:28.807 回答
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.

整洁的!

于 2013-04-01T15:34:56.267 回答
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.
于 2013-04-01T15:43:04.213 回答