2011-06-05 29 views

回答

11

你可以保持兩個變量:

for (var n = 1, s = 1; ...; ++n, s = -s) 
    alert(n * s); 
+0

我喜歡它!非常好:) – 2011-06-05 13:23:44

+1

這很好,但它*更簡單*? – Orbling 2011-06-05 13:37:46

+0

嗯,它非常直觀和可讀:) – 2011-06-05 14:06:00

-1

如何:

while (...) 
{ 
    if (n * -1 > 0) { n -= 1; } 
    else { n += 1; } 

    n *= -1; 
} 

似乎是最簡單的方法。

+0

這將以'1開始;那麼'(1 + 1)* -1 = -2',然後'(-2 + 1)* -1 = -1',不是嗎?你會得到'1,-2,-1' – Nanne 2011-06-05 13:15:55

+0

我知道,我修正了它。錯誤發生時,你不3天睡:P – Lockhead 2011-06-05 13:20:24

+0

@MisterSir:需要注意的是'N * -1> 0'等同於'ñ<0'這是很多簡單(我在我的回答說)。 – Orbling 2011-06-05 13:36:47

2

這看起來是正確的,並不比這更簡單。儘管如果您從n = 1開始,而不是n % 2 == 0(通常是較慢的操作),則可以使用n < 0

否則,您將需要兩個變量。

4

這是簡單

x = 1; 
while (...) { 
    use(x); 
    x = - x - x/Math.abs(x); 
} 

x = 1; 
while (...) { 
    use(x); 
    x = - (x + (x > 0)*2 - 1); 
} 

或者更簡單(如果你不需要真正的「增量」的變量,但只是使用的值)

for (x=1; x<n; x++) 
    use((x & 1) ? x : -x); 
+0

我認爲這沒有得到正確的序列... – Pointy 2011-06-05 13:20:10

+0

@Pointy:'x/Math.abs(x)'是'sign(x)'......那部分不清楚? – 6502 2011-06-05 13:23:05

+0

對不起,我犯了一個優先錯誤:-)沒關係。 – Pointy 2011-06-05 13:25:48

0

您可以隨時使用以下方法:

for (var i = 1; i < 8; i++) { 
    var isOdd = (i % 2 === 1); 
    var j = (isOdd - !isOdd) * i; 
} 

這是相似的,順便說一下,你會怎麼弄的符號(-1三態,0或1)一些在JavaScript的:

var sign = (num > 0) - (num < 0) 
2

如何:

var n = 1; 
while(...) 
    n = n < 0 ? -(n - 1) : -(n + 1); 
0
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2)) 
    console.log (n); 
+0

也許它有訣竅,但它是不可讀的.... – 2011-06-05 13:58:05

0

怎麼樣位操作 -

n = 1; 
while(...) 
{ 
    if(n&1) 
    cout<<n<<","; 
    else 
    cout<<~n+1<<","; 
} 

沒有什麼比這個好!