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