在 C++ 中找到等比數列中缺失的數字


假設我們有一個數組表示等比數列的元素。缺少一個元素。我們要找到缺失的元素。因此,如果 arr = [1, 3, 27, 81],輸出是 9,因為缺少 9。

使用二分查詢,我們可以解決這個問題。我們進入中間元素,然後檢查中間元素與中間元素旁邊的元素之間的比率是否與公比相同。如果沒有,則缺少元素存在於下標 mid 和 mid + 1 之間。如果中間元素是數列中的 n/2 元素,則缺少元素位於右半部分,否則位於左半部分。

示例

#include <iostream>
#include <cmath>
using namespace std;
class Progression {
   public:
   int missingUtil(int arr[], int left, int right, int ratio) {
      if (right <= left)
         return INT_MAX;
      int mid = left + (right - left) / 2;
      if (arr[mid + 1] - arr[mid] != ratio)
         return (arr[mid] * ratio);
      if (mid > 0 && arr[mid] / arr[mid - 1] != ratio)
         return (arr[mid - 1] * ratio);
      if (arr[mid] == arr[0] * pow(ratio, mid))
         return missingUtil(arr, mid + 1, right, ratio);
         return missingUtil(arr, left, mid - 1, ratio);
   }
   int missingElement(int arr[], int n) {
      int ratio = pow(arr[n-1]/arr[0], 1.0/n);
         return missingUtil(arr, 0, n - 1, ratio);
   }
};
int main() {
   Progression pg;
   int arr[] = {1, 3, 27, 81};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "The missing element is: " << pg.missingElement(arr, n);
}

輸出

The missing element is: 9

更新於: 18-12-2019

107 次瀏覽

開啟您的 職業

完成課程獲得認證

開始
廣告