#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 |