2014-08-28 16 views
0

http://projecteuler.net/problem=1Java中的Euler Challenge 1 - 我做錯了什麼?

嘿。我是一名高中生,希望能夠很好地掌握編程問題,所以我訪問了Project Euler。對於問題1,我用Java編寫了一些可以解決問題的代碼,但顯然有些問題。我能得到一些關於什麼的見解嗎?

說明: 我停止索引值爲332的所有內容,因爲Java從0開始計數,333 * 3爲999,低於1,000。蘋果是一個單獨的類,其代碼幾乎相同,儘管它的數量爲5.最後,我手動將兩個答案加在一起,但它不對。我究竟做錯了什麼? 兩個最終金額分別是:

三:164838

五:97515個

public class Learning { 
    public static void main(String[] args){ 
     int three[] = new int[333]; 
     int counter = 0; 
     three[332] = 0; 
     int totalthree = 0; 
     int threeincrementer = 1; 
     int grandtotal; 
     boolean run = true; 
     boolean runagain = true; 


     for (counter = 1; counter<=332; counter++){ 
      three[counter] = 3 * counter; 
      if (!(three[332] == 0)){ 
       System.out.println("Finished three."); 

       while (run == true){ 
        totalthree = totalthree + three[threeincrementer]; 
        threeincrementer++; 
        if (threeincrementer >= 332){ 
         run = false; 
         System.out.println("Three final is: " + totalthree); 
         }  
        } 
       } 


     if (runagain == true){ 
     apples ApplesObject = new apples(); 
     ApplesObject.rerun(0); 
     runagain = false; 
      } 
     } 
    } 
} 
+0

打印出的信息與'System.out'和反覆次數比較少看到那裏的計算出錯。這是基本的調試,以及在StackOverflow上詢問之前應該做什麼。 – Kayaman 2014-08-28 22:17:14

+1

請勿使用'System.out'使用血腥的調試器。 – redFIVE 2014-08-28 22:24:06

+0

在你的問題陳述中,你說'Java從0開始計數',但爲什麼是這種情況?你的計數器從1到332,爲什麼java會做任何不同的事情? – rdowell 2014-08-28 22:35:31

回答

1

一些數字是在同一時間的3乘5像15,所以你不應該單獨計算總和3所有的乘法和5乘法比添加它們,因爲你最終會做這樣的事情

sum3 = 3,6,9,12,15,... 

sum5 = 5,10,15,... 

所以第一sum3將包括15,並且sum5也將包含它,這意味着您將添加15次兩次。現在來平衡你的計算,你將需要從你的sum3+sum5總和減去這將增加15

sum15 = 15,30,45,... 

因此,使用你的方法,你最終的公式應該像sum3+sum5-sum15的所有乘法。對於這個問題

但簡單的解決方案可以像

sum = 0 
for each X in 1...999 
    if (X is multiplication of 3) OR (X is multiplication of 5) 
     add X to sum 

要檢查是否存在數X個y的乘法可以用modulo操作%(例如reminder = X % Y),它發現一個數相除的餘由另一個。

你可以找到更多的Java運營商here

+0

沒有想到這一點。我不認爲編程是爲我而剪裁的:謝謝! – user113580 2014-08-28 22:36:46

+1

@ user113580不客氣:)。順便說一句,我不會說謊,編程不是最簡單的事情,但它絕對是每個人都需要的(它只需要很多的堅持和練習,不同的人以不同的速度學習不同的東西,所以不要輕易放棄)。 – Pshemo 2014-08-28 22:42:23

+0

@ user113580不要輕易放棄!在計算3和5的倍數時偶然計數兩次是非常容易忽略的。重要的是要從中學習。乾杯! – 2014-08-28 23:19:17