0

私がやろうとしているのは、指定された範囲内の 3 つおきの奇数を返すことだけです。

これは私にとって少し奇妙です。いくつかの異なることを試しましたが、探していたものに近い結果が得られなかったため、投稿する価値さえありませんでした。現在の能力の範囲外であると感じています。助けていただければ幸いです。前もって感謝します。

4

4 に答える 4

1

率直なコードの回答は避けます。(釣り>魚を食べる)。

経験則として、係数が似ている一連の数値に関心がある場合は、モジュラス演算子 (%) を使用することをお勧めします。(それが正式に正しいかどうかはわかりませんが、私はそう考えています)。

したがって、すべての偶数が必要な場合は、次のようにします。

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

毎秒偶数だけが必要な場合は、これにカウンターを追加する方法がわかりますか? 最後に、3 つおきの奇数になるようにこれを変更する方法がわかりますか?

于 2013-04-09T05:40:47.627 に答える
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 に答える
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 から始まる 3 つおきの奇数を返します (ゼロから始まる 3 つおきではありません)。ご覧のとおり、下部と上部の両方が含まれています。lowerBound が偶数の場合、2 の剰余演算はゼロになります。そのため、最初に lowerBound に 1 を追加します。(偶数+1)=奇数にします。2 を法とする奇数は 1 に等しいため、lowerBound+1 から開始します。

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