2015-07-01 34 views
0

所以我正在做項目歐拉挑戰,我卡在第一個,我用Java作爲PL。例如,如果我們必須列出10以下的所有自然數,它們是3或5的倍數,我們得到3,5,6和9.這些倍數的總和爲23. 我們必須找到所有倍數的總和N爲3或5以下。N以下3或5的所有倍數的總和。項目歐拉

我的代碼適用於Eclipse,但是我得到了「很好的嘗試,但是你沒有通過這個測試用例。」與標準輸出:沒有任何反應,當我提交的代碼我得到的所有測試用例錯誤答案,這裏是代碼:

public class Solution { 
    public static void main(String[] args) { 
     for (int j = 0; j < args.length; j++) { 
      int N = Integer.parseInt(args[j]); 
      if (Somme(N) != 0) { 
       System.out.println(Somme(N)); 
      } 
     } 
    } 

    public static int Somme(int Nn) { 
     int s = 0; 
     for (int i = 0; i < Nn; i++) { 
      if (((i % 3) == 0) || ((i % 5) == 0) 
       && !(((i % 3) == 0) && ((i % 5) == 0))) { 
       s = s + i; 
      } 
     } 
     return (s); 
    } 
} 

UPDATE: 所以,我看着越來越事實證明,這是它應該如何這樣做:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Solution{ 
public static void main(String[] args) throws IOException { 


    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String line = br.readLine(); 
    int Nbr = Integer.parseInt(line); 


     for(int j=0; j<Nbr;j++) 
     { 
      BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); 
      String line2 = br2.readLine(); 
      String[] numbers = new String[Nbr]; 
      numbers[j]= line2; 
      System.out.println(Somme(Long.parseLong(numbers[j]))); 
     } 

     } 


public static long Somme(long Nn) { 
    long s = 0; 
    for (int i = 0; i < Nn; i++) { 
     if (((i % 3) == 0) || ((i % 5) == 0)) { 
      s = s + i; 
     } 
    } 
    return (s); 
} 

}

現在唯一剩下的問題是,我希望它能夠讀取所有的數字後顯示的總和,現在它讀取一個數字和右後顯示的總和它,有什麼想法?

+0

檢查極端情況!如果輸入大於int的大小 – ganeshvjy

+0

我不確定我是否理解你,我是否應該控制用戶輸入? – Hadh

+0

不應該使用標準輸入嗎?不是作爲參數? – Wazaaaap

回答

2

您正在跳過一些不應跳過的數字。

if (((i % 3) == 0) || ((i % 5) == 0) 
    && !(((i % 3) == 0) && ((i % 5) == 0))) 

該聲明說:i必須由35是分割的,可就是不能由35整除。轉載請註明:i必須可以被35整除,但不能同時包含兩者。只要刪除第二行,它應該工作。

+0

是的,這是正確的,我所做的是沒有做任何事情,我仍然有同樣的問題,我認爲這是@zubergu說的東西與System.in – Hadh

0

我相信這是圖靈85說的和wazaaaap的結合。 項目歐拉的例子都顯示它不需要不同的輸入。你只需要產生正確的輸出。因此,與Integer.parseInt(1000); 取代Integer.parseInt(args[j]);要添加到什麼圖靈說,該解決方案應遵循以下僞代碼:

target=999 
sum=0 
for i=1 to target do 
if (i mod 3=0) or (i mod 5)=0 then sum:=sum+i 
output sum 
+1

'Integer.parseInt(1000);'? '1000'怎麼樣? –

+0

OP如何啓動程序是無關緊要的。如果他/她希望將參數作爲命令行參數輸入,則這是完全正確的。結果不會受到影響(除非命令行參數超過'Integer.MAX_VALUE',但不是練習的目標)。 – Turing85

+0

不,你在第一行看到你插入了多少個整數,例如,如果我有10和100,我想知道3和5的倍數之和低於10,總和低於100,輸入應該是: ** 2 ** ** 10 ** ** 100 ** 輸出: ** 23 ** ** 2318 ** – Hadh