2013年12月22日 星期日

二元搜尋法

利用二元搜尋法 找出第1500位是2或3或5的倍數。
ps.其實這題目不是我本來要算的題目 = =+

想法步驟 :
1. 先寫一個函數算出是第幾位數(數學)
2. 設定mid = (頭 + 尾) / 2
3. 把mid 放到函數去,跑出來數字如果大於1500位,就表示從mid 到 尾端的一系列數字都會比1500大,就都捨去不用算了,然後設定"尾" = mid -1
4.小於的想法也是一樣,"頭" = mid +1。
5.最後用迴圈就可以跑出答案囉!!

  1. /****************************************
  2. Project: 運用binary serach 找出第1500個 是2或3或5的倍數
  3. Aurhor:  CHEN YU YUAN
  4. Language: C++
  5. ****************************************/
  6. #include <iostream>
  7. using namespace std;
  8. int U(int n)
  9. {
  10.         return n/2 + n/3 + n/5 - n/6 - n/10 - n/15 + n/30;
  11. }
  12. int main()
  13. {
  14.         int n = 0, a1 = 1, a2 = 3000, mid;
  15.         while ( U(mid) != 1500 )
  16.         {
  17.                 mid = (a1+a2) / 2;
  18.                 if( U(mid) > 1500)
  19.                 {
  20.                         cout << '#' << ++<< " 次搜尋的數字為" << U(mid) <<endl;
  21.                         a2 = mid - 1;
  22.                 }
  23.                 else if ( U(mid) < 1500)
  24.                 {
  25.                         cout << '#' << ++<< " 次搜尋的數字為" << U(mid) <<endl;
  26.                         a1 = mid + 1;
  27.                 }
  28.                 else
  29.                 {
  30.                         cout << "find out!!";
  31.                         break;
  32.                 }
  33.         }
  34.          cout << mid;
  35. }

沒有留言:

張貼留言