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

C++에서 LCM(arr[i], arr[j])> min(arr[i],arr[j])과 같은 배열의 카운트 쌍

<시간/>

양의 정수 배열이 제공됩니다. 목표는 조건 LCM( arr[i], arr[j] )> 최소값( arr[i], arr[j] )이 되도록 arr[] 요소 쌍의 개수를 찾는 것입니다. 즉, 쌍에서 요소의 최소 공배수는 두 요소의 최소값보다 큽니다.

참고 - 쌍( arr[i], arr[j] )은 ( arr[j],arr[i] )와 동일합니다. 두 번 계산하지 마십시오.

예를 들어 이해합시다.

입력 - arr[] =[ 1,5,4,2 ]

출력 − LCM(arr[i], arr[j])> min(arr[i],arr[j])이 − 6인 배열의 쌍 수

설명 − 총 6쌍은 −

Pair 1 (1,5) LCM is 5 > 1
Pair 2 (1,4) LCM is 4 > 1
Pair 3 (1,2) LCM is 2 > 1
Pair 4 (5,4) LCM is 20 > 4
Pair 5 (5,2) LCM is 10 > 2
Pair 6 (4,2) LCM is 4 > 2

입력 - arr[] =[ 3,3,6 ]

출력 − LCM(arr[i], arr[j])> min(arr[i],arr[j])이 − 2인 배열의 쌍 수

설명 − 총 2쌍은 −

Pair 1 (3,6) LCM is 6 > 3
Pair 2 (3,6) LCM is 6 > 3

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

위의 조건은 arr[i]==arr[j]인 경우에만 거짓입니다. 고유한 요소 간에 쌍이 형성됩니다. 배열의 고유한 요소 빈도를 포함하는 정렬되지 않은 맵을 가져옵니다. 이제 모든 유사한 요소 쌍을 제거합니다. 각 주파수에 대해 최대 쌍을 ( freq * (freq-1)/2 )로 계산합니다. 계산할 모든 계산을 추가합니다.

총 배열에는 크기 요소가 있고 최대 쌍=size(size-1)/2입니다.

결과는 쌍 수입니다. ( 모든 쌍 - 동일한 요소와 쌍).

정수 배열을 가져옵니다.

  • 정수 배열을 가져옵니다.

  • conditional_pair(int arr[], int size) 함수는 배열과 배열의 크기를 가져와 조건이 충족되는 쌍의 개수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • arr[]의 요소와 해당 빈도에 대해 unordered_map um을 사용합니다.

  • for 및 각 주파수 temp =it.second를 사용하는 트래버스 맵; (it=iterator) temp*(temp-1)/2를 추가하여 계산합니다. 요소의 임시 수에 대해 가능한 모든 쌍입니다.

  • 이제 count에는 우리의 경우 고려되지 않을 동일한 요소의 모든 쌍이 있습니다.

  • 배열 요소에 대해 가능한 총 쌍을 temp=size*(size-1)/2로 계산합니다.

  • 카운트를 카운트로 업데이트 - 임시.

  • 결과로 카운트를 반환합니다.

#include <bits/stdc++.h>
using namespace std;
int conditional_pair(int arr[], int size){
   int count = 0;
   unordered_map<int, int> um;
   for (int i = 0; i < size; i++){
      um[arr[i]]++;
   }
   for (auto it : um){
      int temp = it.second;
      count = count + temp * (temp - 1) / 2;
   }
   int temp = (size * (size - 1)) / 2;
   count = temp - count;
   return count;
}
int main(){
   int arr[] = { 4, 1, 7, 3, 2};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are:
"<<conditional_pair(arr, size);
   return 0;
}

출력

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

Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: 10