2011-08-29 3 views
0

저는 최근 Skiena의 "Programming Challenges"책을 읽기 시작했으며 매우 첫 번째 문제에 얽매이지 않았습니다.왜 내 3n + 1 문제 해결책이 잘못 되었습니까?

는 여기에 문제에 대한 링크입니다 : 3n+1 problem

여기 내 코드입니다 :

#include <stdio.h> 

long get_cycle(long input){ 
    if (input == 1){ 
     return 1; 
    } 
    else{ 
     if (input & 1){ 
      return 2 + get_cycle((3*input+1)>>1); 
     } 
     else{ 
      return 1 + get_cycle(input >> 1); 
     } 
    } 
} 

long get_range_cycle(int k, int j){ 
    int i; 
    int max = 0; 
    int current_cycle; 
    int to = k > j ? k : j; 
    int from = k < j ? k : j; 
    for (i=from; i<=to; ++i){ 
     current_cycle = get_cycle(i); 
     if (current_cycle > max){ 
      max = current_cycle; 
     } 
    } 
    return max; 
} 

int main(){ 
    long p, q; 
    long re[100][3]; 
    int i = 0; 
    while (scanf("%ld %ld",&p,&q) == 2){ 
     re[i][0] = p; 
     re[i][1] = q; 
     re[i][2] = get_range_cycle(p,q); 
     ++i; 
    } 
    int j; 
    for (j=0; j<i; ++j){ 
     printf("%ld %ld %ld\n",re[j][0],re[j][1],re[j][2]); 
    } 
} 

내 코드를 잘못 무엇인가가? 입력 및 출력은 sample.But과 정확히 동일하지만 제출 결과는 항상 런타임 오류입니다!

+0

"내 코드에 어떤 문제가 있습니까?" 아주 좋은 스택 오버플로 질문이 아닙니다. –

+2

문제를 해결할 수는 없지만, 당신의 메인은 뭔가를 "반환"해야합니다. – Vache

+2

당신은 정말로 uva 판사 포럼에서 물어 봐야합니다 –

답변

1

코드가 입력 파일에서 최대 100 줄인 것처럼 보입니다. 테스트하는 샘플 데이터가 더 클 수 있습니다. 그들은 입력 데이터의 최대 크기 설정에 대한 명시 적 요구를하지 않습니다.

0

나는 당신이 대답을 찾는데 문제가 대답 @ 엘레멘트에 있다고 믿습니다. 그러나 문제를 해결하면 솔루션 시간이 초과됩니다.

당신이해야 할 일은 0에서 1000000 사이의 모든 대답 목록을 작성하는 것입니다. 이것은 선형 시간 내에 완료 될 수 있습니다 (나는 완전한 답을주지 않을 것입니다).

관련 문제