728x90
반응형
[14번 문제]
양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기로 합니다.
n → n / 2 (n이 짝수일 때)
n → 3 n + 1 (n이 홀수일 때)
13에 대하여 위의 규칙을 적용해보면 아래처럼 10번의 과정을 통해 1이 됩니다.
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
아직 증명은 되지 않았지만, 이런 과정을 거치면 어떤 수로 시작해도 마지막에는 1로 끝나리라 생각됩니다.
(역주: 이것은 콜라츠 추측 Collatz Conjecture이라고 하며, 이런 수들을 우박수 hailstone sequence라 부르기도 합니다)
그러면, 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?
참고: 계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다.
[코드]
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 | #include "stdafx.h" #include <stdlib.h> #include <iostream> using namespace::std; int check(unsigned int num) { int temp = 0; while (num > 1) { if (num % 2 == 0) num /= 2; else num = num * 3 + 1; temp++; } return temp; } int ans=0; int main() { int max=1,temp; for (int i = 2; i <= 1000000; i++) { temp = check(i); if (temp > max) { max = temp; ans = i; } } cout << ans << endl; system("pause"); return 0; } | cs |
728x90
반응형
'Solution > Project Euler' 카테고리의 다른 글
[16/C++] 2^1000의 각 자리수를 모두 더하면? (0) | 2018.05.25 |
---|---|
[15/C++] 20×20 격자의 좌상단에서 우하단으로 가는 경로의 수 (0) | 2018.05.25 |
[13/C++] 50자리 숫자 100개를 더한 값의 첫 10자리 구하기 (0) | 2018.05.25 |
[12/C++] 500개 이상의 약수를 갖는 가장 작은 삼각수는? (0) | 2018.05.25 |
[11/C++] 20×20 격자에서 연속된 네 숫자의 곱 중 최대값 (0) | 2018.05.24 |