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

C++ 프로그램에서 숫자가 L-R의 N 범위에 있는지 확인하는 쿼리

<시간/>

이 문제에서는 n개의 범위(L, R), L-R로 구성된 2차원 행렬 arr[][2]가 제공됩니다. 그리고 Q는 각각 정수 값으로 구성된 쿼리를 수행합니다. 우리의 임무는 숫자가 L-R의 N 범위에 있는지 확인하기 위해 쿼리를 해결하는 프로그램을 만드는 것입니다.

문제 설명 − 여기에서 쿼리의 각 요소가 범위 중 하나에 있도록 각 쿼리를 해결합니다.

범위가 중복될 수 없습니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

arr[n][2] = { {5, 7}, {1, 3}, {9, 12} } n = 3 Q = 2, query = {10, 4}

출력

Yes
No

설명

문제를 해결하는 간단한 방법은 각 쿼리를 해결하고 요소가 있는 범위를 찾는 것입니다. 범위 중 하나에 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 범위 값을 기준으로 행렬을 정렬하면 도움이 됩니다.

알고리즘

1단계 − 범위를 기준으로 행렬을 rowise로 정렬합니다.

2단계 − 모든 쿼리에 대해 i -> 0에서 Q에 대한 루프.

2.1단계 - 요소가 범위 중 하나에 있는 경우, 즉 (arr[i][0] <=q &&arr[i][1]>=q) -> true를 반환합니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
bool isPresent(int arr[][2], int n, int element){
   for(int i = 0; i < n; i++){
      if(arr[i][0] <= element && arr[i][1] >= element )
      return true;
   }
   return false;
}
void solveQueries_Range(int arr[][2], int n, int Q, int query[]){
   int temp[2];
   for(int j = 0; j < (n - 1); j++){
      for(int k = (j + 1); k < n; k++)
      if(arr[j][0] > arr[k][0]){
         temp[0] = arr[k][0]; temp[1] = arr[k][1];
         arr[k][0] = arr[j][0]; arr[k][1] = arr[j][1];
         arr[j][0] = temp[0]; arr[j][1] = temp[1];
      }
   }
   for(int i = 0; i < Q; i++ ){
      if(isPresent(arr, n, query[i]))
         cout<<"For Query "<<(i + 1)<<": The number "<<query[i]<<" lies in the range\n";
      else
         cout<<"For Query "<<(i + 1)<<": The number "<<query[i]<<" does not lie in the range\n";
   }
}
int main(){
   int arr[][2] = { {5, 7}, {1, 3}, {9, 12} };
   int n = 3;
   int Q = 2;
   int query[] = { 10, 4 };
   solveQueries_Range(arr, n, Q, query);
   return 0;
}

출력

For Query 1: The number 10 lies in the range
For Query 2: The number 4 does not lie in the range