Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาตัวเลขที่หายไปในลำดับเรขาคณิต (Geometric Progression) ใน C++

สมมติว่ามีอาร์เรย์ที่แสดงองค์ประกอบของลำดับเรขาคณิตตามลำดับ มีองค์ประกอบหนึ่งหายไป เราต้องหาองค์ประกอบที่หายไป ดังนั้นถ้า arr = [1, 3, 27, 81] ผลลัพธ์คือ 9 เพราะ 9 หายไป

ใช้การค้นหาแบบทวิภาค (Binary Search) เราสามารถแก้ปัญหานี้ได้ เราจะไปที่องค์ประกอบกลาง ตรวจสอบว่าอัตราส่วนระหว่างกลางและถัดจากกลางเท่ากับอัตราส่วนร่วมหรือไม่ หากไม่เท่ากัน องค์ประกอบที่หายไปอยู่ระหว่างดัชนี mid และ mid + 1 หากองค์ประกอบกลางเป็นองค์ประกอบ n/2 ใน GP องค์ประกอบที่หายไปอยู่ในครึ่งขวา มิฉะนั้นอยู่ครึ่งซ้าย

ตัวอย่าง

#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