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

Tìm bộ ba số tổng hai số bằng số còn lại C++

Cho mảng n số. Tìm 3 số a,b,c sao cho a+b=c. Ví dụ: [5,32,1,7,10,50,19,21,2] → 21,2,19 vì 2+19=21.

Sắp xếp + hai con trỏ

  1. Sắp xếp mảng tăng dần.
  2. Duyệt c từ cuối về đầu (phần tử lớn nhất).
  3. Dùng hai con trỏ j=0, k=i-1 tìm a+b=c.
  4. Nếu a+b < c → j++. Nếu a+b > c → k--.

Ví dụ minh họa

#include <iostream>
#include <algorithm>
using namespace std;

void findTriplet(int arr[], int n) {
    sort(arr, arr+n);
    for (int i = n-1; i >= 0; i--) {
        int j = 0, k = i-1;
        while (j < k) {
            if (arr[i] == arr[j] + arr[k]) {
                cout << "Ba so: " << arr[i] << ' ' << arr[j] << ' ' << arr[k];
                return;
            }
            else if (arr[i] > arr[j] + arr[k]) j++;
            else k--;
        }
    }
    cout << "Khong co bo ba nao";
}

int main() {
    int arr[] = {5, 32, 1, 7, 10, 50, 19, 21, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    findTriplet(arr, n);
    return 0;
}

Kết quả

Ba so: 21 2 19