Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용한 산술 진행에서 누락된 숫자

<시간/>

산술 진행의 요소를 순서대로 나타내는 배열이 있다고 가정합니다. 하나의 요소가 누락되었습니다. 누락된 요소를 찾아야 합니다. 따라서 arr =[2, 4, 8, 10, 12, 14]인 경우 6이 없기 때문에 출력은 6입니다.

이진 검색을 사용하여 이 문제를 해결할 수 있습니다. 중간 요소로 이동한 다음 중간과 중간 옆의 차이가 diff와 같은지 확인합니다. 그렇지 않은 경우 누락된 요소는 인덱스 mid와 mid + 1 사이에 존재합니다. 중간 요소가 AP의 n/2번째 요소이면 누락된 요소는 오른쪽 절반에 있고 그렇지 않으면 왼쪽 절반에 있습니다.

예시(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