Categories: Algorithm

3n+1 문제 (The 3n+1 Problem / 알고리즘 트레이닝 북 1번 문제)

알고리즘 트레이닝 책을 보고 3n+1 문제를 풀어보았습니다.

최적화 된 코드는 아닙니다. 인터넷에서 여러 가지 코드를 찾아 보실 수 있을 것입니다.

[이곳]을 방문하시면 문제와 좀 더 최적화 된 답을 보실 수 있을 것입니다.

여러 가지 방법을 적용해 볼 까 하다가 많은 답이나 코딩 방법이 나오기 때문에

처음 답을 맞췄던 코드로 올립니다. 간단하니 참고하시길 바랍니다.

1146637707.zip




/*      @JUDGE_ID:      110101  100     C++     */

/* @BEGIN_OF_SOURCE_CODE */

#include <iostream>

using namespace std;

int main()
{
       int oriStart = 0;
       int oriEnd = 0;

       while(cin >> oriEnd >> oriStart != 0) ///< 두개의 값을 입력받는다.
       {
               int start = oriStart;
               int end = oriEnd;

               int maxCount = 0; ///< 최대 사이클 횟수를 저장

               if(end > start) ///< 만약 서로 입력 순서가 바뀌었다면 서로 바꿔준다.
                       swap(end, start);

               for(int i = end; i <= start; ++i)
               {
                       if(i < 1 || i >= 1000000) ///< 예외처리 코드
                               continue;

                       int count = 1;
                       int result = i;

                       while(result != 1)
                       {
                               if(!(result & 1)) ///< 짝수일때  == if(result % 2 == 0)
                               {
                                       result >>= 1;; ///< == result /= 2
                               }
                               else ///< 홀수일때
                               {
                                       result = result * 3 + 1;
                               }
                               ++count;
                       }
                       if(count > maxCount) ///< 현재 수가 최대 사이클을 기록했다면 기록을 갈아치우자
                               maxCount = count;
               }
               cout << oriEnd << ” “ << oriStart << ” “ << maxCount << endl;
       }

       return 0;
}

/* END_OF_SOURCE_CODE */
dingpong

Share
Published by
dingpong

Recent Posts

LFS error at git checkout in Jenkins

Problem stdout: stderr: Downloading xxxx.a (83 MB) error: git-lfs smudge -- 'xxxx.a' died of signal…

3년 ago

플레이모빌 크리스마스 XXL 6629 산타 해외직구 구매가 배송비

https://www.playmobil.de/playmobil-xxl-weihnachtsmann/6629.html 구매가 : 48.49 유로 (플레이모빌 독일 홈페이지) 결제하는데 안되서 PayPal 로 결제하니 잘 잔행…

3년 ago

코카콜라 제로 355ml 72캔 구매가 (캔당 453원)

롯데온에서 355ml 24캔 롯데카드로 구매시 13,210원 https://www.lotteon.com/p/product/PD36294 APP으로 35,000원 이상 구매시 7,000 포인트 적립 행사…

4년 ago

경동나비엔 온수매트 EQM541-QS (퀸사이즈) 구입가

구입 매장 : 현대 홈쇼핑 (홈쇼핑 방송 중) 모바일 앱 http://www.hyundaihmall.com/front/pda/itemPtc.do?slitmCd=2114353981 최종 결제 가격 :…

4년 ago

PostMessage에 shared_ptr과 같은 스마트 포인터 넣기

PostMessage의 WPARAM 이나 LPARAM 으로 shared_ptr 와 같은 스마트 포인터 객체를 넘기고 싶은 경우가 있습니다.…

4년 ago

RC2255 – named STRINGTABLEs are not allowed

Visual Studio 에서 작업 중 이러한 컴파일 에러가 발생한 케이스가 있었습니다. 이 경우에는 .rc 파일에…

4년 ago