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

Đếm các cặp trong một mảng chứa i * arr [i]> j * arr [j] trong C ++

Chúng tôi được cung cấp một mảng số. Mục đích là tìm cặp phần tử của mảng sao cho chúng có điều kiện

Nếu (i * arr [i]> j * arr [j]) thì (arr [i], arr [j]) là một cặp hợp lệ.

Nếu mảng là [5,4,3,2,1] thì các cặp sẽ là [3,1] và [2,1].

Hãy cho chúng tôi hiểu với các ví dụ.

Đầu vào - arr [] =[1,5,4,1,2,8,3]

Đầu ra - Số lượng các cặp trong một mảng chứa i * arr [i]> j * arr [j] là - 3

Giải thích - Các cặp là (5,1), (4,1), (8,3)

Đầu vào - arr [] =[-1, -2,3,4,5,6]

Đầu ra - Số lượng các cặp trong một mảng chứa i * arr [i]> j * arr [j] là - 1

Giải thích - Cặp là (-1, -2)

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 sẽ duyệt từ 1 đến N bằng cách sử dụng vòng lặp for hai lần. Với mọi i và arr [i] tìm kiếm j và arr [j] sao cho điều kiện i * arr [i]> j * arr [j] (và i! =J). Số lượng tăng lên nếu điều kiện là đúng.

  • Lấy một mảng các số nguyên.

  • Hàm condition_pair (int arr [], int size) nhận mảng và kích thước của nó và trả về số lượng các cặp sao cho điều kiện được đáp ứng.

  • Lấy số lượng ban đầu là 0.

  • Chuyển từ i =1 sang i

  • Chuyển từ j =i + 1 đến j

  • Nếu (i * arr [i])> (j * arr [j]) là true. Số lượng tăng dần.

  • Với mỗi i và j, tính temp =(i * j)% (i + j).

  • Sau khi kết thúc cả hai lần lặp, số đếm sẽ có tổng số các cặp như vậy.

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

Ví dụ

#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;
}

Đầ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 pairs in an array that hold i*arr[i] > j*arr[j] are: 2