私がやろうとしているのは、指定された範囲内の 3 つおきの奇数を返すことだけです。
これは私にとって少し奇妙です。いくつかの異なることを試しましたが、探していたものに近い結果が得られなかったため、投稿する価値さえありませんでした。現在の能力の範囲外であると感じています。助けていただければ幸いです。前もって感謝します。
私がやろうとしているのは、指定された範囲内の 3 つおきの奇数を返すことだけです。
これは私にとって少し奇妙です。いくつかの異なることを試しましたが、探していたものに近い結果が得られなかったため、投稿する価値さえありませんでした。現在の能力の範囲外であると感じています。助けていただければ幸いです。前もって感謝します。
率直なコードの回答は避けます。(釣り>魚を食べる)。
経験則として、係数が似ている一連の数値に関心がある場合は、モジュラス演算子 (%) を使用することをお勧めします。(それが正式に正しいかどうかはわかりませんが、私はそう考えています)。
したがって、すべての偶数が必要な場合は、次のようにします。
for (var i = 0; i < range; i++) {
if (i % 2 == 0) print i;
}
毎秒偶数だけが必要な場合は、これにカウンターを追加する方法がわかりますか? 最後に、3 つおきの奇数になるようにこれを変更する方法がわかりますか?
試す
<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,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]
まず、モジュロ 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; ...)