반응형
문제
다음의 점화식에 의해 정해지는 수열 C(n)을 생각하자:
C(n+1) = C(n)/2 (C(n)이 짝수일 때) = 3*C(n)+1 (C(n)이 홀수일 때)
초항 C(1)이 자연수로 주어지면, 이 점화식은 자연수로 이루어지는 수열을 정한다. 예를 들어, C(1)=26이면, 다음의 수열이 된다.
26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, ...
이 경우, 수열의 뒷부분은 4, 2, 1 이 끝없이 반복된다. 실제로 C(1)이 5×260보다 작은 자연수인 모든 수열은 언젠가는 4, 2, 1로 끝나게 된다는 것이 알려져 있다.
주어진 입력 C(1)에 대하여 C(n)이 처음으로 1이 되는 n을 출력하시오.
입력
C(1); 1 ≤ C(1) ≤ 100000
출력
C(n)이 처음으로 1이 되는 n
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cmath>
#include<stack>
#include<set>
#include<map>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n = 1;
int c;
cin >> c;
while (1)
{
if (c == 1)
break;
if (c % 2)
{
c = 3 * c + 1;
}
else
{
c /= 2;
}
n++;
}
cout << n << endl;
return 0;
}
반응형
'Algorithm' 카테고리의 다른 글
[2016 홍익대학교 프로그래밍 경진대회] 13703번 물벼룩의 생존확률 (0) | 2021.01.21 |
---|---|
[2017 홍익대학교 프로그래밍 경진대회] 14926번 Not Equal (0) | 2021.01.20 |
[2017 홍익대학교 프로그래밍 경진대회] 14925번 목장 건설하기 (0) | 2021.01.20 |
[2017 홍익대학교 프로그래밍 경진대회] 14923번 미로 탈출 (0) | 2021.01.17 |
[2017 홍익대학교 프로그래밍 경진대회] 14922번 부분평균 (0) | 2021.01.16 |