Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
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
Archives
Today
Total
관리 메뉴

코딩로그

[백준/BOJ/C++] 14920번 3n+1 수열 본문

YJ/C++

[백준/BOJ/C++] 14920번 3n+1 수열

Team DAON 2021. 10. 22. 14:13

[문제]

다음의 점화식에 의해 정해지는 수열 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

 

[Source Code]

#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	int input, count = 0;
	cin >> input;

	while(true){
		if(input == 1){
			count++;
			break;
		}
		else if(input % 2 == 0){
			input = input / 2;
			count++;
		}
		else{
			input = input * 3 + 1;
			count++;
		}
	}
	cout << count;
}

[결과 화면]

'YJ > C++' 카테고리의 다른 글

[백준/BOJ/C++] 17009번 Winning Score  (0) 2021.10.22
[백준/BOJ/C++] 5086번 배수와 약수  (0) 2021.10.22
[백준/BOJ/C++] 10569번 다면체  (0) 2021.10.21
[백준/BOJ/C++] 15969번 행복  (0) 2021.10.21
[백준/BOJ/C++] 2480번 주사위 세개  (0) 2021.10.21