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

จำนวนที่ขาดหายไปในความก้าวหน้าทางคณิตศาสตร์โดยใช้ C ++


สมมติว่าเรามีอาร์เรย์ที่แสดงถึงองค์ประกอบของความก้าวหน้าทางคณิตศาสตร์ตามลำดับ ขาดองค์ประกอบหนึ่ง เราต้องหาองค์ประกอบที่ขาดหายไป ดังนั้นหาก arr =[2, 4, 8, 10, 12, 14] เอาต์พุตคือ 6 เนื่องจากไม่มี 6

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

ตัวอย่าง (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;
}

อินพุต

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

ผลลัพธ์

The missing element is: 6