【问题标题】:Number sequence of 1 2 4 8 11 12 14 18 using only one variable and one for loop1 2 4 8 11 12 14 18 的数列仅使用一个变量和一个 for 循环
【发布时间】:2017-09-06 03:25:28
【问题描述】:

我被要求提供一种仅使用一个变量和一个 for 循环的算法。不使用函数、数组或任何其他函数。只有一个输入是唯一的变量,还有一个 for 循环,它应该显示一个 1 2 4 8 ... 的数字序列,具体取决于输入值。您将在表单中输入值,然后在提交后,发布的数据将是唯一要操作的变量。

例如输入值为 20,所以应该显示

1 2 4 8 11 12 14 18

如果输入值为50,应该显示

1 2 4 8 11 12 14 18 21 22 24 28 31 32 34 38 41 42 44 48

我知道已经有人询问过这样的similar question,但我认为它已经关闭了。

这是迄今为止我在php数学问题中遇到的最难的问题。请帮帮我。

完成这项工作的人给了我一个线索,这只是 For 循环第三个元素 中的方程式问题,传统上设计用于递增/递减 p>

这方面的一个工作示例是这样的。 (感谢localheinz

<?php 
$input = 20;
        $a = function ($n) {
            return 10 * floor($n  / 4);
        };
        $b = function ($n) {
            return 2 ** ($n  % 4);
        };
        for ($n = 0; $input >= $value = $a($n) + $b($n) ; ++$n){
            echo $value." ";      
        }
?>

但是你们都知道它不是在一个单一的变量中,而是在使用函数。因此,即使它显示相同的结果,也不会被接受。

【问题讨论】:

    标签: loops variables for-loop numbers


    【解决方案1】:
    <?php
    $input = 50;
    for ($n = 1; $n <= $input; $n += $n % 5) {
        echo "$n ";
    }
    

    【讨论】:

    • 对我来说,这个解决方案看起来很完美,只有一个循环和变量(虽然需要两个变量)加上优化。投票!
    【解决方案2】:

    如果$input 不计入变量,那么这可能是一个解决方案

    <?php
    $input = 20;
    for ($i = 0; (2 ** ($i % 4) + 10 * floor($i / 4)) <= $input; $i++) {
        echo (2 ** ($i % 4) + 10 * floor($i / 4))." ";
    }
    ?>
    

    没有floor函数:

    <?php
    $input = 20;
    for ($i = 0; $i <= $input; $i++) {
        if ($i % 10 == 1 || $i % 10 == 2 || $i % 10 == 4 || $i % 10 == 8)
            echo $i." ";
    }
    ?>
    

    但是,必须在$input 旁边使用附加变量$i

    【讨论】:

    • 你几乎明白了兄弟,但问题是范围。当输入为 20 时,它应该只显示 1 2 4 8 11 12 14 18,但结果显示它显示 1 2 4 8 11 12 14 18 21 22 24 28 31 32 34 38 41 42 44 48。可能有问题范围内。
    • 好吧,我更新了答案。但它仍然使用 2 个变量 $input$i 虽然
    • 谢谢兄弟,这是迄今为止最有效的代码,可能是可以接受的。基本上 $input 将来自 post 数据,所以它可以被 $_POST['value'] 或 post('value') 替换为 codeigniter。
    猜你喜欢
    • 2018-02-11
    • 2018-08-15
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多