소ê°� ¶
2005/02/18 Accepted 0:03.725 440
ë¬¸ì œì—� 나와 있는 단순한 ì•Œê³ ë¦¬ì¦˜ì�„ ì œëŒ€ë¡œ 구현만 í•´ë�„ 성공하는 쉬운 ë¬¸ì œ.
그러나 ìž…ë ¥ 최악기준 (1, 999999) ì—� 대해 수행시간ì�´ 턱없ì�´ 길다.
ë¬¸ì œì—� 나와 있는 단순한 ì•Œê³ ë¦¬ì¦˜ì�„ ì œëŒ€ë¡œ 구현만 í•´ë�„ 성공하는 쉬운 ë¬¸ì œ.
그러나 ìž…ë ¥ 최악기준 (1, 999999) ì—� 대해 수행시간ì�´ 턱없ì�´ 길다.
코드 ¶
~cpp
// no100 - The 3n+1 Problem
#include <iostream>
using namespace std;
int findMaxCycle(int a, int b);
int main()
{
int a, b; // ìž…ë ¥ë�˜ëŠ” ë‘� ê°œì�˜ 수
while (cin >> a >> b)
{
int maxCycle = findMaxCycle(a, b); // 최대 사��
cout << a << " " << b << " " << maxCycle << endl;
}
return 0;
}
int findMaxCycle(int a, int b)
{
if (a > b)
{
int t;
t = a;
a = b;
b = t;
}
int nCycle; // 사�� 길�
long temp; // ê³¼ì • ê°’ì�€ 32비트를 넘길 수ë�„ 있다.
int maxCycle = 0; // 최대 사��
if (a == 1 && b == 1)
return 1;
else if (a == 1)
a++;
int i;
for (i=a; i<=b; i++)
{
nCycle = 1;
temp = i;
while (true)
{
if (temp % 2 == 0)
{
temp /= 2;
nCycle++;
if (temp == 1)
break;
}
else
{
temp = (3 * temp + 1) / 2;
nCycle += 2;
}
}
if (maxCycle < nCycle)
maxCycle = nCycle;
}
return maxCycle;
}










