【问题标题】:Print first 50 number which are divisible by each number from 1 to 10打印前 50 个数字,这些数字可以被 1 到 10 的每个数字整除
【发布时间】:2012-12-28 22:22:02
【问题描述】:

要打印可以被 1 到 10 之间的每个数字整除的前 50 个数字,我已经这样做了,现在如何在内循环中执行除法测试任务?

for ($i = 1, $j = 1; $j <= 50; $i++) {
    if ($i % 1 == 0 && $i % 2 == 0 && $i % 3 == 0 && $i % 4 == 0 && $i % 5 == 0 && $i % 6 == 0 && $i % 7 == 0 && $i % 8 == 0 && $i % 9 == 0 && $i % 10 == 0) {
        echo "$i\n";
        $j++;
    }
}

【问题讨论】:

  • 具体问题是什么?您的解决方案也应该有效,为什么要更改它?如果这是家庭作业,您应该添加homework-tag。
  • @JanDvorak 他做到了,即使这是一种有点不正统的方式(测试表达式基于$j,而不是计数变量$i
  • 我认为 JanDvorak 误解了。
  • @KingCrunch 你是对的;请注意,我只使用for,如果我不更改循环内的迭代变量(它是迭代变量,只有我正在更改的迭代变量)。
  • @KingCrunch:不,他不应该添加'homework'标签(不管是否),it's been deprecated有一段时间了,现在。

标签: php for-loop nested-loops


【解决方案1】:

您可以嵌套循环并使用模运算符 (%)。

for ($i = 1, $count = 0; $count < 50; $i++) {
    $good = true;
    for ($j = 2; $j <= 10; $j++) {
         if ($i % $j != 0) {
             $good = false;
             break;
         }
    }

    if ($good) {
        echo "$i\n";
        $count++;
    }
}

【讨论】:

  • 谢谢它可以工作,但它正在打印前 51 个数字,我认为我们应该设置 $count = 1;
  • @EdnanHossain 已编辑:从 $count &lt;= 50 更改为 $count &lt; 50。我的错。
  • 谢谢!你能告诉我哪个是更好的选择吗?为什么?请不要介意我只是好奇。 $计数 = 1;或 $count
  • @EdnanHossain 是从零开始计数还是从一开始计数几乎是程序员的一个宗教话题。从零开始的方法可能更常见,但两者都有其优点。
【解决方案2】:

您只需要测试它们是否是 9875 的倍数,如果是,则增加 j 计数器。当j 到达50 时,主循环中断。

$div = array(9,8,7,5);
function isMultipleOf10($num){
    for($i=0;$i<4;$i++){
        if($num%$div[$i]!=0){
            return 0;
        }
    }
    return 1;
}
$i = 1;
$j = 0;
while($j<50){
    if(isMultipleOf10($i)){
        echo $i . "\n";
        $j++;
    }
    $i++;
}

【讨论】:

    【解决方案3】:

    把问题转过来。而不是搜索部门,只需将它们多个:

    $min = 5 * 7 * 8 * 9; // Min number is 5 * 7 * 8 * 9. (1,2,3,4,6,10 are implied)  Every number that meets the condition is a multiple of this.
    for ($i = 1; $i <= 50; $i++)
    {
      echo $min * $i; 
      echo "\n";
    }
    

    【讨论】:

    • ++ 供您解释。 :)
    【解决方案4】:
    for ($i = 1; $i <= 50; $i++)
    {
            $j = $i * 2520;
            echo "$j\n";
    } 
    

    【讨论】:

    • 感谢您的帮助!我有一个问题,你是怎么得到 2520 的?
    • @EdnanHossain 1..10 的最小公倍数
    • 直到我发布我的答案后我才看到你的答案 - 你打败了我!
    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 2019-04-16
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多