The 3n + 1 problem (콜라츠 추측)



문제 출처 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36
http://ko.wikipedia.org/wiki/%EC%BD%9C%EB%9D%BC%EC%B8%A0_%EC%B6%94%EC%B8%A1



#include <stdio.h>
long getMaxCycleLength(long i, long j)
{
    long n, temp;
    long maxCycleLength = 0;
    
    if(j < i) {
        temp = i;
        i = j;
        j = temp;
    }
    for(n = i; i <= j; i++) {
        long cycleLengh = 1;
        n = i;
        while(n != 1) {
            if(n%2 == 0) n >>= 1;
            else n = n*3 + 1;
            cycleLengh++;
        }
        if(cycleLengh > maxCycleLength) maxCycleLength = cycleLengh;
    }
    return maxCycleLength;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    long i, j;
    while (scanf("%ld %ld", &i, &j) == 2) {
        long maxCycleLength = getMaxCycleLength(i, j);
        printf("%ld %ld %ld\n", i, j, maxCycleLength);
    }
    //printf("Hello, World!\n");
    return 0;
}


C로 올렸더니, Ansi-C라서 //는 주석이 안먹어서 컴파일 에러...
14903796100The 3n + 1 problemCompilation errorANSI C0.0002015-02-01 13:50:29

다시 올렸더니...틀렸다네...몇 번이나 해봤는데...음..음.
14903982100The 3n + 1 problemWrong answerC++0.3182015-02-01 14:12:45

그래서, 구글링 해보니(해결된 소스는 세상에 많다..)...설명에 i가 j보다 항상 작다는 말이 없다...이런....그래서, i가 j보다 클 경우의 예외처리(?swap)를 하니 Accept되었다.
#ProblemVerdictLanguageRun TimeSubmission Date
14904442100The 3n + 1 problemAcceptedC++0.5422015-02-01 15:15:29

댓글

이 블로그의 인기 게시물

Linux mint에서 DLNA (minidlna) 설치

Linux mint에서 android phone에 adb 연결시 ".... no permissions"이 나온다면....