【问题标题】:Is it possible to brute force a Lucky Ticket? [closed]是否可以暴力破解幸运票? [关闭]
【发布时间】:2013-03-22 16:35:40
【问题描述】:

我有一个问题需要计算“幸运票”的数量,其中每张票有 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';



}
?>

当我尝试运行它时,我得到:

Ok
致命错误:/Applications/MAMP/htdocs/Exersize/LuckyTicket.php 第 26 行的最大执行时间超过 30 秒

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

谢谢!

【问题讨论】:

标签: php arrays


【解决方案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.

【讨论】:

  • 为什么从100000开始?您缺少很多解决方案。
  • 将起始索引改为0会失败
  • 天哪,这效率太低了。如此浪费时钟周期。
  • 你也错过了$i=999999
  • 随意用 OP 使用的语言编写一些更高效的代码。我总是乐于看到改进的代码。
【解决方案2】:

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

max_execution_time = 0

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

ini_set('max_execution_time', 0);

【讨论】:

  • 哇,这肯定需要很多时间!会不会有其他算法?
【解决方案3】:

你只需要数一数吗? 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.

整洁!

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2017-07-04
    • 2011-03-28
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多