2012-01-10 4 views
-4

Dev-C++을 사용하고 있습니다. 코드 오류는 보이지 않지만 작동하지 않습니다.간단한 프로그램이 컴파일되지 않습니다.

피보나치 시퀀스에서 각각의 새로운 용어는 앞의 두 조건을 추가하여 생성 : 나는이 문제에 있어요 10 또는 20

처럼 작은 숫자를하려고 할 때

그것은 작동합니다. (1) 및 (2)에서 시작하여, 제 10 개 관점은 됩니다

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

를 조건을 고려하여 값이 이 4 백만을 초과하지 않는 피보나치 시퀀스에서 짝수 값의 합을 찾는다. 내가 알

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
const int N=100; 
int a=1,b=2,i,t[N],S=0,c,j; 
t[0]=1; 
t[1]=2; 
for(i=2;i<N;i++){ 
t[i]=t[i-2]+t[i-1]; 
if(t[i]>4000000) 
{ 
for(j=1;j<=i-1;j++){ 
        c=t[j]%2; 
        if(c==0){ 
          S=S+t[j]; 
          } 
        else { 
          continue; 
        }} 
break; 
} 
} 
printf("%d\n",S); 
system("pause"); 
} 
+5

가 자신에게 부탁을하고 변수의 들여 쓰기 및 공백의 사용 및 명명을 개선하십시오. 또한 ''에 선언 된 것을 사용하지 않으므로 #include는 스팸 일뿐입니다. – pmg

+0

출력은 무엇입니까? 너는 무엇을 기대하고 있니? – eduffy

+4

Dev-C++을 사용하지 마십시오! 그것은 오랜 시간이 지난 후에 죽은 프로젝트이며 고대 컴파일러와 함께 배송됩니다. – ThiefMaster

답변

1

모든 숫자를 저장하는 데 배열이 필요하지 않은 경우 다음 두 단어를 순서에 저장하는 것이 좋습니다. 그 다음 단어를 계산하는 것이 모두 필요합니다.

스택에 많은 공간을 할당하려고하면 스택이 상대적으로 제한된 리소스이므로 문제가 발생합니다.

사실 정확히 리눅스에서이 코드를 입력하면 리눅스를 실행하려고 할 때 세분화 위반이 발생합니다.

은 그 꼭대기에, 당신의 코드가 하지 짝수 가치 측면을 받고, 그것은 모든 용어 을 얻고, 당신은 오히려 지정된 사백만 아래 값보다, 처음 사백만 값을 받고있어.

이 같을 것이다 이후에있어 코드의 종류 :

#include <stdio.h> 

int main (void) { 
    // Accumulator and terms (acc is zero because first two terms are odd). 

    int acc = 0, t1 = 1, t2 = 1, t3; 

    // Continue until next term is 4mil or more. 

    while ((t3 = t1 + t2) < 4000000) { 
     // printf ("DEBUG: %d %d %d %s\n", t1, t2, t3, 
     //  ((t3 % 2) == 0) ? "<<" : ""); 

     // Accumulate only even terms. 

     if ((t3 % 2) == 0) acc += t3; 

     // Cycle through terms. 

     t1 = t2; t2 = t3; 
    } 

    // Print the accumulated value. 

    printf ("%d\n", acc); 

    return 0; 
} 

그리고 출력 :

4613732 

당신이 해제 주석 디버그 문을, 당신이 볼하여 해당 프로그램을 테스트하는 경우 :

DEBUG: 1 1 2 << 
DEBUG: 1 2 3 
DEBUG: 2 3 5 
DEBUG: 3 5 8 << 
DEBUG: 5 8 13 
DEBUG: 8 13 21 
DEBUG: 13 21 34 << 
DEBUG: 21 34 55 
DEBUG: 34 55 89 
DEBUG: 55 89 144 << 
DEBUG: 89 144 233 
DEBUG: 144 233 377 
DEBUG: 233 377 610 << 
DEBUG: 377 610 987 
DEBUG: 610 987 1597 
DEBUG: 987 1597 2584 << 
DEBUG: 1597 2584 4181 
DEBUG: 2584 4181 6765 
DEBUG: 4181 6765 10946 << 
DEBUG: 6765 10946 17711 
DEBUG: 10946 17711 28657 
DEBUG: 17711 28657 46368 << 
DEBUG: 28657 46368 75025 
DEBUG: 46368 75025 121393 
DEBUG: 75025 121393 196418 << 
DEBUG: 121393 196418 317811 
DEBUG: 196418 317811 514229 
DEBUG: 317811 514229 832040 << 
DEBUG: 514229 832040 1346269 
DEBUG: 832040 1346269 2178309 
DEBUG: 1346269 2178309 3524578 << 
4613732 

하고, 당신이 그 DEBUG 라인의 끝에서 모든 짝수 번호를 추가하는 경우, 당신은 실제로 주어진 가치를 얻습니다.

0

두 가지 main는 반환 형식이없는 (int main() 시도) 및 N이 배열의 크기로 사용되지만 일정하지 점이다.

2

가변 크기 배열 (T [N])을 정의 할 수 없습니다. N const를 만들면 문제를 해결해야합니다.

const int N = 3999998; 
int T(N); 

또한, 메인는 반환 형식이 있어야합니다. "int main()"으로 변경 하시겠습니까?

+0

C가 아니지만 분명히 OP가 멀티를 쓰려고합니다. - 언어 소스 파일 : – pmg

+0

Err, c99는 const 표현식없이 VLA를 허용합니다. – paxdiablo

+0

@paxdiablo : 네, 맞습니다! 나는 Lindydancer가 맞다고 생각합니다. – nijoakim

0

"스택 오버플로"라는 매우 일반적인 프로그래밍 오류입니다. 실제로 매우 일반적으로 많이 사용되는 질문 및 답변 사이트 인 "Stack Overflow"에 대해 들어 본 적이 있습니다.

(나는 "스택 오버플로를"합류 이후로이 대답을 줄 수있는 기다리고있어!)

+0

참고 :이 답변은 이전 버전의 질문에 대한 응답으로 제공되었습니다. 여기서 제공된 코드는 3999998 int 형식의 배열을 할당했습니다. – Lindydancer

관련 문제