Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số cặp (i, j) sao cho arr [i] * arr [j]> arr [i] + arr [j] trong C ++


Chúng ta được cung cấp một mảng gồm n số dương, mục tiêu là đếm các cặp có thứ tự (i, j) sao cho arr [i] * arr [j]> arr [i] + arr [j] và 0 <=i

Chúng tôi sẽ duyệt qua mảng bằng cách sử dụng hai vòng lặp for cho mỗi số cặp. Bây giờ hãy tính tổng và tích của arr [i] và arr [j]. Nếu sản phẩm lớn hơn tổng số gia tăng.

Hãy cùng hiểu với các ví dụ.

Đầu vào - Arr [] ={1,1,2,3} N =4

Đầu ra - Số cặp - 1

Giải thích - Chỉ có cặp hợp lệ là - (2,3)

2*3=6 > 2+3=5

Đầu vào - Arr [] ={2,2,2} N =3

Đầu ra - Số cặp - 0

Giải thích - cả 2 * 2 và 2 + 2 là 4. Không có cặp nào trong đó product> sum

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy một mảng số nguyên arr [] được khởi tạo bằng các số dương.

  • Lấy một biến n lưu trữ độ dài của Arr [].

  • Hàm countPairs (int arr [], int n) nhận một mảng, độ dài của nó làm đầu vào và in ra số lượng các cặp với product> sum.

  • Traverse mảng sử dụng hai vòng lặp for cho mỗi phần tử của cặp.

  • Vòng ngoài từ 0 <=i

  • Kiểm tra xem arr [i] * arr [j]> arr [i] + arr [j] hay không. Số lượng tăng lên nếu đúng.

  • Ở cuối tất cả các vòng đếm sẽ có tổng số cặp có sản phẩm> tổng

  • Kết quả là số lượt trả lại.

Ví dụ

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int countPairs(int arr[], int n){
   int count=0;
   int sum=0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         if(arr[i]*arr[j]>arr[i]+arr[j]) //condition
            { count++; }
      }
   }
   return count;
}
int main(){
   int arr[] = { 1,2,3,2 };
   int len = sizeof(arr) / sizeof(int);
   cout<<"Count of number of pairs :"<<countPairs(arr, len);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of number of pairs :2