Algorithm/OnlineJudge

p100 ( 3n + 1)

두 수 i, j 를 입력받은 다음, 그 사이 값에 대하여 규칙에 따라 연산을 했을 때, 제일 연산을 많이 수행했을 때의 횟수를 출력하는 문제.

 

규칙

  • 홀수이면 *3을 하고 1을 더한다.
  • 짝수이면 /2를 한다
더보기
#include<iostream>
#include<algorithm>
#pragma warning(disable:4996);
using namespace std;

int solve(int num) {
	int cnt = 1;
	while (num > 1) {
		cnt++;
		if (num % 2 == 0) {
			num /= 2;
		}
		else {
			num = num * 3 + 1;
		}
	}

	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	int i, j, length;

	while (cin >> i && cin >> j) {
		length = 0;


		int here = min(i, j);
		while (here <= max(i,j)) {
			length = max(length, solve(here));
			here++;
		}
		
		cout << i << " " << j << " " << length << "\n";
	}

	return 0;
}