Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm tất cả các cặp (a,b) và (c,d) trong mảng thỏa mãn ab = cd bằng C++


Giả sử chúng ta có một mảng A, từ mảng đó, chúng ta phải chọn hai cặp (a, b) và (c, d), sao cho ab = cd. Cho mảng A = [3, 4, 7, 1, 2, 9, 8]. Các cặp kết quả là (4, 2) và (1, 8). Để giải quyết bài toán này, chúng ta sẽ làm theo các bước sau:

  • Với i := 0 đến n-1, làm
    • với j := i + 1 đến n-1, làm
      • tính tích = arr[i] * arr[j]
      • nếu tích không có trong bảng băm, thì Hash[tích] := (i, j)
      • nếu tích có trong bảng băm, thì in cặp trước và cặp hiện tại.

Ví dụ

#include <iostream> #include <unordered_map> using namespace std; void displayPairs(int arr[], int n) {    bool found = false;    unordered_map<int, pair < int, int > > Hash;    for (int i=0; i<n; i++) {       for (int j=i+1; j<n; j++) {          int prod = arr[i]*arr[j];          if (Hash.find(prod) == Hash.end())             Hash[prod] = make_pair(i,j);          else{             pair<int,int> pp = Hash[prod];             cout << "(" << arr[pp.first] << ", " << arr[pp.second] << ") and (" << arr[i]<<", "<<arr[j] << ")"<<endl; found = true;          }       }    }    if (found == false)    cout << "No pairs have Found" << endl; } int main() {    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};    int n = sizeof(arr)/sizeof(int);    displayPairs(arr, n); }

Kết quả

(1, 6) and (2, 3) (1, 8) and (2, 4) (2, 6) and (3, 4) (3, 8) and (4, 6)