Chúng ta được cho một mảng Arr [] gồm các số nguyên có độ dài n. Mục đích là tìm số bộ ba (Arr [i], Arr [j], Arr [k]) sao cho tổng của hai số bất kỳ bằng số thứ ba.
a + b =c, trong đó a, b, c là các phần tử của Arr [] với các chỉ số i, j, k sao cho 0 <=i
Đầu vào
arr[]= { 1,2,2,3,4 }, N=5
Đầu ra
Number of triplets: 4
Giải thích
Bộ ba với arr [x] + arr [y] =arr [z].
Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3 Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3 Arr{}=[ 1,2,2,3,4 ] =(1,3,4) → 1+3=4 Arr{}=[ 1,2,2,3,4 ] =(2,2,4) → 2+2=4
Tổng số sinh ba:4
Đầu vào
arr[]= {2,2,2,2,2}, N=5
Đầu ra
Number of triplets: 0
Giải thích
Hai số đều có tổng =4 không bằng thứ ba =2.
Tổng số sinh ba:0
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 với các số ngẫu nhiên.
-
Biến N lưu trữ độ dài của Arr [].
-
Hàm countTriplets (int arr [], int n) nhận một mảng, độ dài của nó trả về các bộ ba trong đó một trong các số có thể được viết thành tổng của hai số kia
-
Lấy biến số ban đầu là 0 cho số lượng bộ ba.
-
Traverse mảng sử dụng ba vòng lặp for cho mỗi phần tử của bộ ba.
-
Vòng ngoài cùng từ 0 <=i
-
Kiểm tra xem arr [i] + arr [j] ==arr [k] hoặc arr [i] + arr [k] ==arr [j] hoặc arr [k] + arr [j] ==arr [i] Nếu số lượng gia tăng thực sự.
-
Ở cuối tất cả các vòng đếm sẽ có tổng số bộ ba đáp ứng điều kiện.
-
Trả lại kết quả là số lượng.
Ví dụ
#include <bits/stdc++.h> using namespace std; int countTriplets(int arr[], int n){ int count = 0; for (int i = 0; i < n-2; i++){ for (int j = i+1; j < n-1; j++){ for (int k = j+1; k < n; k++){ if(arr[i]+arr[j]==arr[k] || arr[j]+arr[k]==arr[i] || arr[k]+arr[i]==arr[j]){ count++; } } } } return count; } int main(){ int Arr[]={ 1,2,2,3,4 }; int N=5; //length of array cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N); return 0; }
Đầu ra
Number of triplets: 4