【问题标题】:How to conditionally perform math within a loop?如何在循环中有条件地执行数学?
【发布时间】:2018-06-25 17:20:13
【问题描述】:

我想使用循环打印一系列有条件修改的数字。

逻辑是奇数出现不加修改打印,偶数出现平方(乘以自己)。

for ($i=1; $i < 6 ; $i++) { 
    echo $i;
    for ($j=1; $j==$i ; $j++) { 
        echo ($j+1) * ($j+1);
    }
    echo " ";
}

上面的代码打印:14 2 3 4 5.

我想要的结果(如果通过 6 迭代 1)是:

//    unmodified
//    ↓   ↓    ↓
      1 4 3 16 5 36
//      ↑   ↑↑   ↑↑
//      squared (2, 4, and 6)

【问题讨论】:

  • 这个系列的模式是什么?
  • 这个系列的模式是每隔一个数字将是原始数字的平方,例如 1 2 3 4 5 6 ......... 将是 1 4 3 16 5 36.. ...

标签: php loops math conditional increment


【解决方案1】:

您需要从1 开始,并在每次循环中添加2。偶数元素是该数字后面的数字的平方。所以:

for ($i = 1; $i < 6; $i += 2) {
    echo $i . " " . (($i+1) * ($i+1)) . " ";
}

你不需要内部循环。

【讨论】:

  • @Ajeet 这个答案有一个小漏洞,因为它只能正确处理偶数数量。此外,您可以通过减少 for 循环增量并在回显之后使用后增量来拉出所有这些括号:for ($i = 1; $i &lt; 6; ++$i) { echo $i++ , " " , $i * $i , " "; } 演示:3v4l.org/gFVe4
  • @mickmackusa 不知道第一点是什么意思。总是有偶数个结果,因为您要打印成对的数字。
  • 是的,我只提到如果 OP 在奇数次迭代中运行脚本:$i=1; $i &lt; 6 ...您的方式将提供“额外”偶数发生。
  • 我没有把它当作攻击。我只是指出在同一个语句中使用两次递增的变量没有很好的定义。仅仅因为它现在可以工作并不意味着它可以保证在所有实现中都可以工作。
  • 是否有理由仅仅为了节省几个字符而依赖未记录的功能?
【解决方案2】:

使用%的另一种方法

<?php
$result = [];
for ($i=1; $i < 6 ; $i++) { 
    if($i%2==0){
        $result[] = pow($i,2);
    }else{
        $result[] = $i;
    }
}
echo implode(' ', $result);
?>

程序输出

1 4 3 16 5

演示: https://eval.in/1027936

【讨论】:

  • @Ajeet 这个解决方案的优点是没有尾随空格,因为一个数组被生成然后内爆。这个答案会比其他答案慢,但并不明显——除非你正在做疯狂的大序列。
【解决方案3】:
<?php

for($i=1; $i<=6; $i++)
    echo $i&1 ? $i : $i*$i , ' ';

因为你可以确定第 n 项,我们可以编写一个函数来获取第 n 个数字:

function ajeet_number($n) {
    return $n&1 ? $n : $n*$n;
}

并在循环中使用它:

for($i=1; $i<=6; $i++)
    echo ajeet_number($i) . ' ';

或者将该函数应用于一系列数字:

$s = array_map('ajeet_number', range(1,6));
echo implode(' ', $s);

上面的每个输出都是相似的:

1 4 3 16 5 36 

参考:Test if number is odd or even

【讨论】:

  • @Ajeet 从技术上讲,&amp;1 按位“奇数检查”比较运算符是最快的条件检查。条件技术允许更大的灵活性(如果您有奇数个输入数字要处理)。
猜你喜欢
  • 2017-05-27
  • 2021-06-25
  • 1970-01-01
  • 2015-03-20
  • 2011-10-24
  • 2011-01-09
  • 1970-01-01
  • 2020-05-01
  • 2021-10-19
相关资源
最近更新 更多