2009-09-03 75 views
-1

我知道,這可以通過使用添加所有自然數是3到5的倍數:什麼是在下面的代碼

if(i%5 == 0 OR i%3 ==0) sum+=i; 

但是,什麼是錯在下面的C#代碼很容易做到的bug :

int sum = 0; 
    for(int i = 0, j = 0; i < 1000; i+=3, j+=5) 
    { 
     Console.WriteLine("i = " + i); 
     Console.WriteLine("j = " + j); 

     sum += i; 

     Console.WriteLine("Sum after adding i = " + sum); 

     if(j < 995 && j % 3 != 0) 
     { 
      sum += j; 
     } 

     Console.WriteLine("Sum after adding j = " + sum); 

    } 
+0

對不起這一點。你初始化和爲0嗎? – vpram86 2009-09-03 13:32:14

+0

我的壞.. :) ..對不起! – vpram86 2009-09-03 13:35:26

+0

@wefwfwefwe你可以從任何地方開始。希望任何反饋 – Sandbox 2009-09-03 13:52:26

回答

5

聲明j < 995大概應該是j <= 995,否則你是不會添加995到您的總和。

+0

是的。這是問題。我應該自己想清楚了。謝謝。 – Sandbox 2009-09-03 13:39:52

+0

j <1000會更純一些 – xan 2009-09-04 13:18:48

0

這僅僅是一個挑剔的,也許,但還是:「所有」和「低於1000」是不一樣的自然數集,你可能想改變一些東西。

+0

「它可能會多次添加相同的數字」。怎麼樣? – Sandbox 2009-09-03 13:39:19

+0

它沒有,放鬆是錯誤的。您的支票足以防止多次添加相同的號碼(儘管您的循環設計非常規且在第一次閱讀時有點混淆)。 – 2009-09-03 13:45:43

1

明顯的錯誤是,995是5的倍數,將不會得到補充,而996和999都將添加3的倍數:1000在循環狀態,在if條件應該是995相同的數字。

1

另外,如果你想總結所有這些自然數小於1000,爲什麼不包括995?你可以通過把

j <= 995 && j%3!=0 
0
for(int i = 0, j = 0; i < 15; i+=3, j+=5) 

改變這

for(int i = 0, j = 0; i <= 15; i+=3, j+=5) 

<=(大於或等於運算符)

和它的作品

相關問題