2014-01-20 3 views
0

그것은 내 코드는 프로젝트 오일러를 위해 작동하지 않는 것 같습니다, 문제 1. 이 문제는 상태 :프로젝트 오일러, # 1

우리는 3 의 배수 인 10 이하의 모든 자연수를 나열하면 5, 우리는 3, 5, 이러한 배수의 6과 9 합이 내 프로그램의 출력은 1000

다음의 3 가지의 모든 배수의 합 ​​또는 5를 찾기 (23)

입니다 얻을

266,333

내 코드는 다음과 같습니다

private static final int max = 1000; 
    private static int sum; 

    public static void main(String[] args) 
    { 
     addMultiples(3); 
     addMultiples(5); 
     System.out.println(sum); 
    } 

    private static void addMultiples(int mult) 
    { 
     int x = mult; 
     while(x < max) 
     { 
      sum += x; 
      x += mult; 
     } 
    } 

는 수학의 기본적인 기초가 단순히 저를 벗어난 것 같다, 내가 능력이있어 경우이 정말 프로그래머가되기에 저를 낙담 그러한 단순한 문제에 대한 해답을 찾는 것.

+10

힌트 : (15)이 사람들은 합계에 두 번 모두 3과 5의 배수 당신이 번호를 추가하는 3 __and__ 5 – Blastfurnace

+0

의 배수이다. – Juvanis

+2

OP : 첫 번째 시도에서 프로그램을 작동시키지 못한다면 당황하지 마십시오. _ 우리 모두에게 일어납니다. _ –

답변

6

첫째로, 그리고 가장 중요한 을 낙심하지 않습니다. 그저 문제 일 뿐이며 프로그래머로서의 잠재력을 보여주는 아주 나쁜 지표입니다. 실습을 계속하고, 무엇이든, 당신의 실수는 프로그래밍보다 더 많은 수학입니다.

숫자가 3보다 작은 배수를 나열하면 3, 6, 9, 12, 15가됩니다. 숫자가 16보다 작은 배수 인 5를 나열하면 5, 10이됩니다. , 15.

문제점을 확인하십시오.

15 세가 두 번입니다. 구현을 이해할 수 있으므로 코드를 작성하는 데 신경 쓰지 않아도됩니다. 그건 너를 더 좋게 만들지 않을거야.

또한이 문제는 수학 및 합계를 사용하면 훨씬 효율적으로 해결할 수 있지만 그 문제는 귀하에게 맡깁니다.

1

여기에 약간의 오류가 있습니다.

15는 5의 배수이고 3의 배수입니다. 따라서 두 번 계산하지 않으려 고합니다. :)

당신이 할 수있는 한 가지 (이것은 제 말하기 기능적 측면입니다)는 0에서 최대까지 목록을 작성합니다. 그런 다음 3의 모든 배수를 취하여 결과 목록에 추가하고 입력 목록에서 제거하는 메소드를 만듭니다. 이제 트리밍 된 목록이 5의 모든 배수를 필터링하여 동일한 출력 목록에 추가하는 메서드로 전달됩니다.

귀하의 목록을 합친 것입니다.

편집 : 요하네스 Trümpelmann의 솔루션은 짧은 읽고 더 성능, 그래서 당신이 하나를 이동 할 수 있습니다 .. :)

2

당신이 3 5 (15) 등을 추가 배수가했던 실수 두번.

public static void main(String[] args) { 
    long sum = 0; 
    for(int i = 0; i <= 1000; i++) if(i%3==0 || i%5==0) sum += i; 
    System.out.println(sum); 
} 
+1

-1 질문하지 않은 해결책을 게시했습니다. –

1

귀하의 실수는 분배기의 곱셈이 두 번 계산되었음을 고려하지 않았기 때문입니다. 따라서 addMultiples을 변경하여 나누기 배열을 얻으시기 바랍니다.그들은 특정 번호 : 나누면 루프 내에서 칸막이를 확인

private static int sum; 

public static void main(String[] args) 
{ 
    addMultiples(new int[]{3,5}); 
    System.out.println(sum); 
} 

private static void addMultiples(int[] mult) 
{ 
    int x = 1; 
    while(x < max) 
    { 
     for(int i = 0; i < mult.length; i++){ 
      if(x % mult[i] == 0){ 
       sum += x; 
       break; 
      } 
     } 
    } 
}