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

C++에서 주어진 값이 있는 간격의 수를 센다.

<시간/>

간격과 숫자 '값'을 포함하는 2D 배열 arr[][]이 제공됩니다. 목표는 값이 사이에 있는 arr에 존재하는 간격의 수를 찾는 것입니다. 예를 들어 간격이 [ [1,5], [3,7] ]이고 값이 4인 경우 이 간격은 둘 다에 속하며 개수는 2가 됩니다.

예를 들어

입력

arr[4][2] = { { 1, 20 }, { 12, 25 }, { 32, 40 }, { 15, 18 } } value=16

출력

Count of number of intervals in which a given value lies are: 3

설명

The value 16 lies between 1−20, 12−25 and 15−18

입력

arr[4][2] = {{ 1, 20 }, { 20,30 }, { 30, 40 }, { 40, 50 }} value=60

출력

Count of number of intervals in which a given value lies are: 0

설명

The value 60 is larger than all maximum ranges of intervals present in
arr[][].

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서 우리는 arr에 있는 범위의 모든 수에 대해 주파수 배열 rr_2[]를 생성할 것입니다. 따라서 각 범위의 arr[i][0] 및 arr[i][1]에 대해 주파수는 arr_2[ arr[i][0 또는 1] ]로 증가합니다. 결국 우리는 i-1보다 작은 숫자도 i보다 작아서 주파수가 추가될 것이기 때문에 주파수 배열을 arr_2[i]=arr_2[i]+arr_2[i−1]로 업데이트할 것입니다. 이런 식으로 값이 있는 모든 범위로 rr_2[value]를 얻습니다.

  • 범위를 포함하는 정수 배열 arr[][]를 가져옵니다.

  • 정수 값을 입력으로 사용합니다.

  • Interval_values(int arr[][2], int size, int value) 함수는 arr과 value를 취하여 주어진 값이 있는 간격의 수를 반환합니다.

  • 주파수 배열 arr_2[]를 가져옵니다.

  • INT_MAX 및 INT_MIN으로 최저 및 최고를 취하십시오.

  • i=0에서 i까지 for 루프를 사용하여 arr[][] 트래버스

  • 범위의 왼쪽으로 temp를 취하고 arr_2[temp]

    에서 주파수를 증가시킵니다.
  • 범위의 오른쪽으로 temp_2를 가져오고 arr_2[temp_2+1]

    에서 빈도를 증가시킵니다.
  • temp최고인 경우 최고를 temp_2로 설정합니다.

  • 주파수 배열을 탐색하고 arr_2[i]=arr_2[i]+arr_2[i+1]을 업데이트합니다.

  • 결과적으로 arr_2[value]를 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
#define max 1000
int intervals_values(int arr[][2], int size, int value){
   int arr_2[max];
   int low = INT_MAX;
   int highest = INT_MIN;
   for(int i = 0; i < size; i++){
      int temp = arr[i][0];
      arr_2[temp] = arr_2[temp] + 1;
      int temp_2 = arr[i][1];
      arr_2[temp_2 + 1] = arr_2[temp_2 + 1] − 1;
      if(temp < low){
         low = temp;
      }
      if(temp_2 > highest){
         highest = temp_2;
      }
   }
   for (int i = low; i <= highest; i++){
      arr_2[i] = arr_2[i] + arr_2[i − 1];
   }
   return arr_2[value];
}
int main(){
   int arr[4][2] = { { 3, 20 }, { 2, 13 }, { 25, 30 }, { 15, 40 } };
   int size = sizeof(arr) / sizeof(arr[0]);
   int value = 28;
   cout<<"Count the number of intervals in which a given value lies are:
   "<<intervals_values(arr, size, value);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count the number of intervals in which a given value lies are: 18830628