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

C++에서 i*arr[i]> j*arr[j]를 유지하는 배열의 카운트 쌍

<시간/>

우리는 숫자 배열을 받습니다. 목표는 조건을 유지하는 배열 요소 쌍을 찾는 것입니다.

(i*arr[i]> j*arr[j])이면 (arr[i],arr[j])는 유효한 쌍입니다.

배열이 [ 5,4,3,2,1 ]이면 쌍은 [3,1] 및 [2,1]이 됩니다.

예를 들어 이해합시다.

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

출력 − i*arr[i]> j*arr[j]를 유지하는 배열의 쌍 수는 − 3

입니다.

설명 - 쌍은 (5,1), (4,1), (8,3)

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

출력 − i*arr[i]> j*arr[j]를 유지하는 배열의 쌍 수는 − 1

입니다.

설명 - 쌍은 (-1,-2)

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

for 루프를 두 번 사용하여 1에서 N까지 탐색합니다. 모든 i 및 arr[i]에 대해 i*arr[i]>j*arr[j](및 i!=j) 조건이 되는 j 및 arr[j]를 검색합니다. 조건이 true인 경우 카운트를 증가시킵니다.

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

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

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

  • i=1에서 i 까지 순회

  • j=i+1에서 j까지 순회

  • ( i*arr[i] )> ( j*arr[j] ) 이 참이면. 증분 카운트.

  • 각 i 및 j에 대해 temp=(i*j)%(i+j)를 계산합니다.

  • 두 반복이 모두 끝나면 count는 이러한 쌍의 총 수를 갖게 됩니다.

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

예시

#include <iostream>
using namespace std;
int condition_pair(int arr[], int size){
   int count = 0;
   for (int i = 0; i < size - 1; i++){
      for (int j = i + 1; j < size; j++){
         if(i*arr[i] > j*arr[j]){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 2, 4, 1, 9, 6 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array that hold i*arr[i] > j*arr[j] are: "<<condition_pair(arr, size);
   return 0;
}

출력

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

Count of pairs in an array that hold i*arr[i] > j*arr[j] are: 2