2016-10-30 6 views
0

현재 오일러 프로젝트의 일부 문제를 해결하려고하고 있지만 두 번째 문제가 있습니다.피보나치 벡터가있는 시퀀스

void p002() 
{ 
    unsigned int result = 0;  
    std::vector<int> fibonacci{ 1,2 }; 

    for (int i = 2; fibonacci.at(i) < 4000000; i++) 
    { 
     fibonacci.at(i) = fibonacci.at(i - 1) + fibonacci.at(i - 2); //<- Doesn't work 
     if (fibonacci.at(i) % 2 == 0) 
      result += fibonacci.at(i); 
    } 

    std::cout << result; 
} 

누군가가 나를 도와이 한 줄이 작동하지 않는 이유를 말해 줄 수 : 여기 지금이 무엇인가? (코드를 실행하려고 할 때 "abort()"오류가 발생합니다.)

놀라운 경우 : 4,000,000보다 낮은 값으로 fibonacci 시퀀스의 모든 정수 합계를 얻는 것입니다. 짝수.

감사합니다.

+0

적절한 함수를 호출하지 않고 벡터의 크기를 조정할 수 없습니다. 그게 문제가 될 수있는 정보를 알려주는 충분한 정보 여야합니다. 둘째, 이것은'std :: accumulate'과 [Binet 's formula] (http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html#section1)를 사용하는 한 줄짜리 프로그램입니다.) – PaulMcKenzie

+0

* 과제는 피보나치 시퀀스의 모든 정수의 합을 짝수 값 인 4,000,000보다 낮은 값으로 얻는 것입니다. * 또한 위 공식을 사용하면 벡터를 사용하여 문제를 해결할 필요가 없습니다. 코멘트에, 그리고 그냥 루프, 합계에 추가합니다. – PaulMcKenzie

답변

1

vector::at은 범위를 벗어난 인덱스에서 요소에 액세스하려고 시도하면 예외를 throw합니다. 벡터는 2 개의 요소 (인덱스 0과 1)를 포함합니다. 따라서 fibonacci.at(2)이 범위를 벗어나서 예외가 발생합니다. 예외를 catch하지 않으므로 std::terminate이 호출됩니다. 기본적으로 std::terminateabort을 가리키며 프로세스가 종료됩니다.

솔루션 : fibonacci.at(i)이 범위를 벗어나지 않도록 벡터에 요소를 충분히 추가하십시오.