Just like find a number in a binary search tree. The only trick is keeping record of the current node's left and right node to get to its child node.
Code:
- /*************************************************************************
- * Copyright (C) 2008 by liukaipeng *
- * liukaipeng at gmail dot com *
- *************************************************************************/
- /* @JUDGE_ID 00000 10077 C++ "The Stern-Brocot Number System" */
- #include <algorithm>
- #include <cstdio>
- #include <cstring>
- #include <deque>
- #include <fstream>
- #include <iostream>
- #include <list>
- #include <map>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <vector>
- using namespace std;
- typedef unsigned int uint;
- int main(int argc, char *argv[])
- {
- #ifndef ONLINE_JUDGE
- freopen((string(argv[0]) + ".in").c_str(), "r", stdin);
- freopen((string(argv[0]) + ".out").c_str(), "w", stdout);
- #endif
- for (uint m, n; cin >> m >> n && !(m == 1 && n == 1); ) {
- stringstream sb;
- for (uint numerator = 1, denomenator = 1, ln = 0, ld = 1, rn = 1, rd = 0;
- !(m == numerator && n == denomenator); ) {
- if (m * denomenator < n * numerator) { // m/n < numerator/denomenator
- sb << 'L';
- rn = numerator;
- rd = denomenator;
- numerator += ln;
- denomenator += ld;
- } else {
- sb << 'R';
- ln = numerator;
- ld = denomenator;
- numerator += rn;
- denomenator += rd;
- }
- }
- cout << sb.str() << '/n';
- }
- return 0;
- }