본문 바로가기
#DevStudy/문제풀이

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

by 검은_백조 2016. 9. 22.

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


'#DevStudy > 문제풀이' 카테고리의 다른 글

[Baekjoon] 2579 - 계단오르기  (0) 2016.10.11
[Baekjoon] 1149 - RGB  (0) 2016.10.11
[P.C] 3. 여행 (The trip)  (0) 2016.09.23
[P.C] 2. 지뢰찾기 (Minesweeper)  (0) 2016.09.23
[Baekjoon] 5393 콜라츠  (0) 2016.09.22

댓글