使用javascript返回每个THIRD奇数?

时间:2013-04-09 05:26:07

标签: javascript function math numbers range

我所要做的只是返回指定范围内的每第三个奇数。

这个对我来说有点奇怪,我尝试了一些不同的东西但是没有什么值得张贴的,因为我的尝试没有产生接近我想要的结果,我有一种感觉它超出了我目前的范围能力,任何帮助将非常感激。提前谢谢。

4 个答案:

答案 0 :(得分:1)

<script>
var range = 100;
var j = -1;
for (i = 0; i <= range; i++) {
    if (i % 2 == 1) {
        j++;
        if (j % 3 == 0) {
            alert(i);
        }
    }


 }
</script>

答案 1 :(得分:1)

我会避免给你一个直接的代码答案。 (钓鱼&gt;吃鱼)。

一个好的经验法则是当你对一组具有相似因素的数字感兴趣时,使用模数运算符(%)。 (我不知道这是否正式,但我认为这是正确的。)

所以,如果你想要所有偶数,你会这样做:

for (var i = 0; i < range; i++) {
    if (i % 2 == 0) print i;
}

如果您只想要每隔一个偶数,您能看到如何为此添加计数器吗? 最后,你能看到如何改变这个,所以你得到每三个奇数?

答案 2 :(得分:0)

首先通过模2来确定范围中的第一个数字是奇数还是偶数。

function getEveryThirdOdd(lowerBound, upperBound) {
    var x = (lowerBound+1)%2;

    var list = [];
    var k = 0;

    for(var i = lowerBound+x; i<=upperBound; i=i+6) {
        list[k] = i;
        k++;
    }

    return list;
}

此方法返回从lowerBound开始的每三个奇数(不是从零开始的每三个)。如您所见,下部和上部都是包容性的。如果lowerBound是偶数,则2的模运算将为零。这就是为什么我先将1加到lowerBound。使它(甚至+ 1)=奇数。模2的奇数等于1,因此从lowerBound + 1开始:

for(var i = lowerBound+x; ...)

答案 3 :(得分:0)

您可以使用数组并过滤:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
 .filter( 
       function(a){
        this.x += !!(a%2) ? 1 : 0; 
        return !!(a%3) && !!!(this.x%3);
       }, {x:0});
 //=> [5, 11, 17]

See also