2018년 4월 19일 목요일

BOJ13236 Collatz Conjecture

문제 링크 : BOJ13236

문제 요약

함수 \( f(n) \)을 다음과 같이 정의하자
$${\displaystyle f(n)={\begin{cases}n/2&{\text{if }}n\equiv 0{\pmod {2}}\\3n+1&{\text{if }}n\equiv 1{\pmod {2}}.\end{cases}}}$$

모든 자연수 n에 대하여 \( f(f(f(...f(n)))) \) 이 항상 1이 되는 순간이 있는지가 콜라츠 추측이다. 아직 이 문제는 미해결 난제로 남아있다.

문제에선 n이 1이 되는 과정을 출력하면 된다.

문제 풀이

반복문을 통하여 변수를 계속 변화시키다가 1이 되는 시점이 오면 종료한다.

소스코드 (C++)

#include <iostream>
using namespace std;

int main()
{
    int n; cin >> n;
    
    while(n != 1)
    {
        cout << n << ' ';
        n = (n % 2 == 0) ? n/2 : 3*n+1;
    }
    
    cout << 1 << '\n';
    
    return 0;
}

소스코드 (Python2)

n = int(raw_input())

while n != 1:
    print n,
    if n % 2 == 0:
        n /= 2
    else:
        n = 3*n+1

print 1

소스코드 (아희)

삭밣밣밣붏
우더더더어    해
아방빵망빵반밧나타추
  오퍼 누번  우
콜  뫃 우추러번뻥
라추 뽀 우붇
츠측 포어어뚜
   도터벗벋

댓글 없음:

댓글 쓰기