【问题标题】:PHP nested loop BugPHP 嵌套循环错误
【发布时间】:2017-01-25 22:43:29
【问题描述】:

我已经开发了以下代码来找出 100 到 1000 之间的所有 armstrong 数字,但由于某种原因没有按预期运行。

for($i=99;$i<1000;$i++){
    $x = str_split($i);
    $arm = 0;
    foreach ($x as $n){
        $arm = $arm + pow($n,3);
        if ($arm == $i){
            echo $i."\n";
        }
     }
 }

代码检查 $i 的值与 $arm 的值,如果匹配,则打印 $i。这意味着 $i 是一个阿姆斯壮数。输出如下。

153
370
370
371
407

由于某种原因打印两次 370,但根据第一个循环,$i 将只保存一次 370 的值。那么为什么我得到两次 370?

提前感谢您的帮助。

【问题讨论】:

  • 因为在 370 你这样做:3^3 + 7^3 已经等于 370 并且你在你的 foreach 循环中打印出数字。但是在下一次和最后一次迭代中将0^3 添加到370 仍然等于370 并且您再次输出该数字。
  • 是的。基本上,您需要将if 移动到 内部循环之后。

标签: php loops for-loop nested


【解决方案1】:

您两次获得 370,因为:

33 + 73 == 33 + 73 + 03 //27 + 343 == 27 + 343 + 0

当您将所有内容添加在一起时,尝试将 if 语句 放在 foreach 循环之后:

for($i = 99; $i < 1000; $i++){

    $x = str_split($i);
    $arm = 0;

    foreach ($x as $n){
        $arm = $arm + pow($n, 3);
    }

    if ($arm == $i){
        echo $i . "\n";
    }

}

【讨论】:

  • 感谢 Rizier123 将您的贡献添加到我的答案中。
  • 不客气 :) 不要只对 OP 说“试试看”。总是解释为什么你改变了 OP 的代码。
猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2019-03-12
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多