我所要做的只是返回指定范围内的每第三个奇数。
这个对我来说有点奇怪,我尝试了一些不同的东西但是没有什么值得张贴的,因为我的尝试没有产生接近我想要的结果,我有一种感觉它超出了我目前的范围能力,任何帮助将非常感激。提前谢谢。
答案 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]