查询以检查数字是否在C ++程序的LR的N个范围内

在这个问题中,我们给出了一个二维矩阵arr [] [2],它由n个范围(L,R),LR组成。Q分别查询一个整数值。我们的任务是创建一个程序来解决查询,以检查数字是否在LR的N个范围内。

问题描述-在这里,我们对每个查询进行求解,以使查询的每个元素都位于任一范围内。

它们不能重叠范围。

让我们举个例子来了解这个问题,

输入值

arr[n][2] = { {5, 7}, {1, 3}, {9, 12} } n = 3 Q = 2, query = {10, 4}
输出结果
Yes

No

说明

解决问题的一种简单方法是解决每个查询并找到元素所处的范围。如果它位于范围的任何一个中,则返回true,否则返回false。根据范围值对矩阵进行排序会有所帮助。

算法

步骤1-对矩阵行进行排序,即基于范围。

步骤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<<"查询 "<<(i + 1)<<": The number "<<query[i]<<" lies in the range\n";

      else

         cout<<"查询 "<<(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;

}

输出结果
查询 1: The number 10 lies in the range

查询 2: The number 4 does not lie in the range

以上是 查询以检查数字是否在C ++程序的LR的N个范围内 的全部内容, 来源链接: utcz.com/z/315929.html

回到顶部