0

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

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

4

4 回答 4

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>
于 2013-04-09T05:35:40.397 回答
1

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

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

因此,如果您想要所有偶数,您可以这样做:

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

如果你只想要每秒偶数,你能看到如何添加一个计数器吗?最后,你能看到如何改变它,让你每三个奇数得到一个吗?

于 2013-04-09T05:40:47.627 回答
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]

也可以看看

于 2013-04-09T06:03:01.033 回答
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 添加到下界。使其(偶数+1)=奇数。奇数模 2 等于 1,因此从 lowerBound+1 开始:

for(var i = lowerBound+x; ...)
于 2013-04-09T05:41:29.033 回答