dingpong 의 블로그 입니다. 많은 분들의 휴식 공간이 되고자 합니다. 많이 들려주세요.^^
코드가 다소 길기 때문에 파일로만 올리도록 하겠습니다.
책이 없으신 분들은
[이곳] 에서 문제를 보실 수 있습니다.
더 좋은 방법이 있을 것 같은데 마음가는 데로 짜다보니 이렇게 되었네요.
도움이 되시기를 바랍니다.
크리에이티브 커먼즈 라이센스
http://dingpong.net/tt/trackback/145
알고리즘 트레이닝 책을 보고 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 */
크리에이티브 커먼즈 라이센스
http://dingpong.net/tt/trackback/144
From. 작도닷넷 2008/11/20 15:51
100. The 3n + 1 problem (Solution)
http://acm.uva.es/p/v1/100.html
The 3n + 1 problem
맨 첫번째 문제로 무척 유명하다.
원래 C++로 짜면 그냥 풀어도 시간 초과가 안 되는데, Java는 느려서 약간 방법을 써야 한다.
http://acm.uva.es/problemset/data/p100.java.html
100 Java "Easy algorithm"
...심지어는 예제로 올려놓은 것도 느려서 안 된다.
htt...
«
2009/01
»
일
월
화
수
목
금
토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31