Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm số bị thiếu trong cấp số cộng sử dụng C++


Cho mảng biểu diễn các phần tử của cấp số cộng theo thứ tự. Có một phần tử bị thiếu. Tìm phần tử đó. Ví dụ: arr = [2, 4, 8, 10, 12, 14] → kết quả = 6 (vì 6 bị thiếu).

Sử dụng tìm kiếm nhị phân: kiểm tra phần tử giữa, nếu hiệu giữa phần tử giữa và phần tử tiếp theo khác sai số (diff) thì phần tử thiếu nằm giữa mid và mid+1. Nếu phần tử giữa là phần tử thứ n/2 của cấp số cộng thì phần tử thiếu nằm nửa phải, ngược lại nửa trái.

Chương trình C++

#include <iostream> 
using namespace std; 
#define INT_MAX 999999 

class Progression {
public:
    int missingUtil(int arr[], int left, int right, int diff) {
        if (right <= left) return INT_MAX;
        int mid = left + (right - left) / 2;
        if (arr[mid + 1] - arr[mid] != diff)
            return (arr[mid] + diff);
        if (mid > 0 && arr[mid] - arr[mid - 1] != diff)
            return (arr[mid - 1] + diff);
        if (arr[mid] == arr[0] + mid * diff)
            return missingUtil(arr, mid + 1, right, diff);
        return missingUtil(arr, left, mid - 1, diff);
    }
    
    int missingElement(int arr[], int n) {
        int diff = (arr[n - 1] - arr[0]) / n;
        return missingUtil(arr, 0, n - 1, diff);
    }
};

int main() {
    Progression pg;
    int arr[] = {2, 4, 8, 10, 12, 14};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "The missing element is: " << pg.missingElement(arr, n) << endl;
}

Đầu vào

[2,4,8,10,12,14]

Đầu ra

The missing element is: 6