2013-12-08 37 views
1

我剛剛完成了Project Euler(17)的編碼並發現我的代碼不正確。我找不到代碼無法正常工作的地方。輸出一個數字,但在檢查答案後是否太高。我無法找到我弄亂了代碼的地方。我很感激幫助。歐拉項目17未知問題

public class Euler17 
{ 
    public static void main(String[] args) 
{ 
    int total = 0; 

    for(int i = 1; i <= 1000; i++) 
    { 

     total += letters(i); 
     System.out.println(i + " " + letters(i)); 
    } 
    System.out.print(total); 
} 

public static int letters(int i) 
{ 

    if(i >= 1 && i <= 99) 
    { 
     return tens(i); 
    } 

    if(i % 100 == 0 && i != 1000) 
    { 
     return (tens(i/100) + 7); 
    } 

    if(i != 1000) 
    { 
     return hundreds(i); 
    } 

    if(i == 1000) 
    { 
     return 11; 
    } 
    else 
    { 
     return - 1; 
    } 

} 
public static int hundreds(int i) 
{ 
    int h; 
    int t; 
    t = i % 100; 
    h = (i - t)/100; 
    return ones(h) + 10 + tens(t); 
} 
public static int tens(int i) 
{ 
    // int t = 0; 
    int o; 
    o = i % 10; 
    // t = (i - o)/10; 
    // find value of i and split into tens and ones 
    switch(i) 
    { 
     case 1: 
      return 3; 
     case 2: 
      return 3; 
     case 3: 
      return 5; 
     case 4: 
      return 4; 
     case 5: 
      return 4; 
     case 6: 
      return 3; 
     case 7: 
      return 5; 
     case 8: 
      return 5; 
     case 9: 
      return 4; 
     case 10: 
      return 3; 
     case 11: 
      return 6; 
     case 12: 
      return 6; 
     case 13: 
      return 8; 
     case 14: 
      return 8; 
     case 15: 
      return 7; 
     case 16: 
      return 7; 
     case 17: 
      return 9; 
     case 18: 
      return 8; 
     case 19: 
      return 8; 

    } 
    if(i >= 20 && i <= 29) 
    { 
     return 6 + ones(o); 
    } 
    if(i >= 30 && i <= 39) 
    { 
     return 6 + ones(o); 
    } 
    if(i >= 40 && i <= 49) 
    { 
     return 6 + ones(o); 
    } 
    if(i >= 50 && i <= 59) 
    { 
     return 5 + ones(o); 
    } 
    if(i >= 60 && i <= 69) 
    { 
     return 5 + ones(o); 
    } 
    if(i >= 70 && i <= 79) 
    { 
     return 7 + ones(o); 
    } 
    if(i >= 80 && i <= 89) 
    { 
     return 6 + ones(o); 
    } 
    if(i >= 90 && i <= 99) 
    { 
     return 6 + ones(o); 
    } 

    return i; 
} 
public static int ones(int i) 
{ 

    switch(i) 
    { 
     case 1: 
      return 3; 
     case 2: 
      return 3; 
     case 3: 
      return 5; 
     case 4: 
      return 4; 
     case 5: 
      return 4; 
     case 6: 
      return 3; 
     case 7: 
      return 5; 
     case 8: 
      return 5; 
     case 9: 
      return 4; 
     case 0: 
      return 0; 
    } 
    return i; 
} 
} 
+2

請在找到解決方案時不要編輯您的帖子。只要將答案標記爲已接受即可。否則,有這個問題的其他人不能**弄清楚你做錯了什麼。 – hichris123

回答

1
if(i >= 40 && i <= 49) 
{ 
    return 6 + ones(o); 
} 

它的拼寫四十不是四十。在這裏使用5而不是6。