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 |
댓글