공부/Computers

The 3n+1 problem 부터도 실패

언제나19 2011. 8. 15. 21:59


http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=29&page=show_problem&problem=36
에는 설명이 좀 있네.

그런데, 결국 실패했다.
program judge 입맛을 맞춰주고 싶지도 않다.
지금 정석으로 나가기에는 시간이 아까워..

이것 저것 다 시도해보다가 code만 섞였다. c로 썼다가, c++로 썼다가..

lec02 동영상을 41분 봐도 도움되는 말은 "큰 수, 작은 수" 순서 case를 조심하라는 말밖에 안나온다.

계속 틀렸다는 메시지만 받으니, optimize하고 싶지도 않다 T_T

// PcSkienaTry.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

//#include "stdafx.h"
//
//
//int _tmain(int argc, _TCHAR* argv[])
//{
// return 0;
//}

#include <iostream>

int CalculateCycle(int nStart)
{
 long long i = nStart;
 long long nCycle = 0;

 while (i > 1)
 {
  if (i % 2 != 0)
   i = i * 3 + 1;
  else
   i /= 2;

  nCycle++;
 }

 return nCycle+1;
}

int main()
{
 long long nFrom, nTo;
 long long i = 0;

 while ( std::cin >> nFrom >> nTo
  )
 {
  long long nCycle = 0;
  long long nMaxCycle = 0;

  unsigned long int nStart = 0;
  unsigned long int nEnd = 0;

  if (nFrom < nTo)
  {
   nStart = nFrom;
   nEnd = nTo;
  }
  else
  {
   nStart = nTo;
   nEnd = nFrom;
  }

  long long i = nStart;
  for (; i <= nEnd; i++)
  {
   nCycle = CalculateCycle(i);
   if (nCycle > nMaxCycle)
    nMaxCycle = nCycle;
  }

  

  std::cout << nStart << " " << nEnd << " " << nMaxCycle << std::endl;
 }

 return 0;
}

 




Programming Challenges 사이트는 다음과 같습니다.

http://www.programming-challenges.com

UVa 사이트는 다음과 같습니다.

http://uva.onlinejudge.org