#DevStudy/문제풀이

[P.C] 1. 3n+1 문제

검은_백조 2016. 9. 22. 17:54

1. 3n+1 문제

n 이 짝수면 n = n / 2

홀수면 n = 3n + 1 이 되고

n이 1이 될 때까지 반복되는 수열이 있다고 하자


입력 받는 두 수 i , j 사이의 숫자 (i, j 포함)에 대해

위 수열의 최대 길이(c)를 구하시오.


입력

i j

1 10

100 200


출력

i j c

1 10 20

100 200 125




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
int main() {
    int num_1, num_2;
 
    // 두 수를 입력받는다.
    scanf_s("%d %d"&num_1, &num_2);
 
    int max_cycle = 0;
    // 첫 수부터 1씩 증가하면서 두번째 수까지
    for (int i = num_1; i <= num_2; i++)
    {
        int temp = i;
        int cycle = 1;
        // 값이 1일 때 까지 루프
        while (temp != 1)
        {
            // if n % 2 == 0    n /= 2;
            if (temp % 2 == 0) {
                temp /= 2;
            }
            // else   n = n * 3 + 1
            else {
                temp *= 3;
                temp++;
            }
            cycle++;
        }
        
        // 최대 사이클
        if (cycle > max_cycle) max_cycle = cycle;
 
    }
 
    // 출력
    printf("%d %d %d\n", num_1, num_2, max_cycle);
 
    return 1;
}
cs