เราได้รับอาร์เรย์ Arr[] ของจำนวนเต็มที่มีความยาว n เป้าหมายคือการหาจำนวนแฝด (Arr[i],Arr[j],Arr[k]) โดยที่ผลรวมของตัวเลขสองจำนวนใด ๆ เท่ากับจำนวนที่สาม
a+b=c โดยที่ a,b,c เป็นองค์ประกอบของ Arr[] ที่มีดัชนี i,j,k เช่นนั้น 0<=i
แฝดสามที่มี arr[x]+arr[y]=arr[z].
แฝดสามทั้งหมด:4
ทุก ๆ สองตัวเลขมี sum=4 ซึ่งไม่เท่ากับ third=2
แฝดสามทั้งหมด:0
เราใช้อาร์เรย์จำนวนเต็ม Arr[] ที่เริ่มต้นด้วยตัวเลขสุ่ม
ตัวแปร N เก็บความยาวของ Arr[].
ฟังก์ชัน countTriplets(int arr[],int n) รับอาร์เรย์ ความยาวจะคืนค่า triplets ซึ่งสามารถเขียนตัวเลขตัวใดตัวหนึ่งเป็นผลรวมของอีกสองตัว
นำตัวแปรเริ่มต้นนับเป็น 0 สำหรับจำนวนแฝดสาม
Traverse array ใช้สาม for loops สำหรับแต่ละองค์ประกอบของ triplet
วงนอกสุดจาก 0<=i
ตรวจสอบว่า arr[i]+arr[j]==arr[k] หรือ arr[i]+arr[k]==arr[j] หรือ arr[k]+arr[j]==arr[i] ถ้า จริงแล้วนับเพิ่มขึ้น
เมื่อสิ้นสุดการวนซ้ำทั้งหมด การนับจะมีจำนวน triplets ทั้งหมดที่ตรงตามเงื่อนไข
คืนค่าการนับเป็นผลลัพธ์อินพุต
arr[]= { 1,2,2,3,4 }, N=5
ผลลัพธ์
Number of triplets: 4
คำอธิบาย
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
อินพุต
arr[]= {2,2,2,2,2}, N=5
ผลลัพธ์
Number of triplets: 0
คำอธิบาย
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ตัวอย่าง
#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;
}
ผลลัพธ์
Number of triplets : 4