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

C++를 사용하여 정렬되지 않은 배열에서 floor와 ceil을 찾습니다.

<시간/>

여기에서 정렬되지 않은 배열에서 바닥과 천장을 찾는 방법을 살펴보겠습니다. 하한값은 x보다 작거나 같은 큰 요소이고 상한값은 x보다 큰 가장 작은 값입니다. 배열 A =[5, 6, 8, 9, 6, 5, 5, 6]이고 x가 7이면 하한값은 6이고 상한값은 8입니다.

이 문제를 해결하기 위해 선형 탐색 접근 방식을 따릅니다. 배열을 탐색하고 x를 기준으로 두 거리를 추적합니다.

  • x보다 크거나 같은 요소의 최소 거리
  • x보다 작거나 같은 요소의 최소 거리
  • 마지막으로 최소 거리의 인쇄 요소

예시

#include<iostream>
using namespace std;
void floorCeilingPair(int arr[], int n, int x) {
   int floor_index, ceiling_index;
   int floor_dist = INT_MAX, ceil_dist = INT_MAX;
   for (int i=0; i<n; i++) {
      if (arr[i] >= x && ceil_dist > (arr[i] - x)) {
         ceiling_index = i;
         ceil_dist = arr[i] - x;
      }
      if (arr[i] <= x && floor_dist > (x - arr[i])) {
            floor_index = i;
            floor_dist = x - arr[i];
      }
   }
   if (floor_dist == INT_MAX)
      cout << "Floor not found" << endl;
   else
      cout << "Floor value is " << arr[floor_index] << endl;
   if (ceil_dist == INT_MAX)
      cout << "Ceiling not found" << endl;
   else
      cout << "Ceil value is " << arr[ceiling_index] << endl;
}
int main() {
   int arr[] = {5, 6, 8, 9, 6, 5, 5, 6};
   int n = sizeof(arr)/sizeof(int);
   int x = 7;
   floorCeilingPair(arr, n, x);
}

출력

Floor value is 6
Ceil value is 8