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