UVa Problem Solution: 10077 - The Stern-Brocot Number System

来源:互联网 发布:爆笑段子知乎 编辑:程序博客网 时间:2024/04/19 15:56

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:
  1. /*************************************************************************
  2.  * Copyright (C) 2008 by liukaipeng                                      *
  3.  * liukaipeng at gmail dot com                                           *
  4.  *************************************************************************/
  5. /* @JUDGE_ID 00000 10077 C++ "The Stern-Brocot Number System" */
  6. #include <algorithm>
  7. #include <cstdio>
  8. #include <cstring>
  9. #include <deque>
  10. #include <fstream>
  11. #include <iostream>
  12. #include <list>
  13. #include <map>
  14. #include <queue>
  15. #include <set>
  16. #include <sstream>
  17. #include <stack>
  18. #include <string>
  19. #include <vector>
  20. using namespace std;
  21.      
  22. typedef unsigned int uint;
  23.           
  24. int main(int argc, char *argv[])
  25. {
  26. #ifndef ONLINE_JUDGE
  27.   freopen((string(argv[0]) + ".in").c_str(), "r", stdin);
  28.   freopen((string(argv[0]) + ".out").c_str(), "w", stdout);
  29. #endif
  30.   for (uint m, n; cin >> m >> n && !(m == 1 && n == 1); ) {
  31.     stringstream sb;
  32.     for (uint numerator = 1, denomenator = 1, ln = 0, ld = 1, rn = 1, rd = 0; 
  33.          !(m == numerator && n == denomenator); ) {
  34.       if (m * denomenator < n * numerator) { // m/n < numerator/denomenator
  35.         sb << 'L';
  36.         rn = numerator;
  37.         rd = denomenator;
  38.         numerator += ln;
  39.         denomenator += ld;
  40.       } else {
  41.         sb << 'R';
  42.         ln = numerator;
  43.         ld = denomenator;
  44.         numerator += rn;
  45.         denomenator += rd;
  46.       }
  47.     } 
  48.     cout << sb.str() << '/n';
  49.   }
  50.   return 0;
  51. }

原创粉丝点击