알고리즘 트레이닝 책을 보고 3n+1 문제를 풀어보았습니다. /* @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 */ |

110101.zip

