เราได้รับอาร์เรย์ Arr[] ของจำนวนเต็มที่มีความยาว n และตัวเลข M อาร์เรย์มีเฉพาะจำนวนเต็มบวกเท่านั้น เป้าหมายคือการนับแฝดสามขององค์ประกอบของ Arr[] ที่มีผลิตภัณฑ์เท่ากับ M
เราจะทำสิ่งนี้โดยใช้สามลูป จำนวนที่เพิ่มขึ้นถ้า arr[x]*arr[y]*arr[z]=M และ x!=y!=z. (0<=x,y,z
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
arr[]= { 1,2,3,0,2,4 }, M=24 ผลผลิต
Number of triplets with product M: 2
คำอธิบาย
Triplets with arr[x]*arr[y]*arr[z]==M.
Arr{}=[ 1,2,3,0,2,4 ] =(2,3,4) → 2*3*4=24
Arr{}=[ 1,2,3,0,2,4 ] =(3,2,4) → 3*2*4=24
Total triplets: 2 ป้อนข้อมูล
arr[]= {2,2,2,2,2}, M=6 ผลผลิต
Number of triplets with product M: 0
คำอธิบาย
Every triplet has product equal to 8 Total triplets: 0
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้อาร์เรย์จำนวนเต็ม Arr[] ที่เริ่มต้นด้วยตัวเลขสุ่ม
-
ตัวแปร N เก็บความยาวของ Arr[].
-
ฟังก์ชัน productisM(int arr[],int n,int m) รับอาร์เรย์ ความยาวจะส่งกลับค่าสามเท่าซึ่งผลิตภัณฑ์มีค่าเท่ากับ m
-
นำตัวแปรเริ่มต้นนับเป็น 0 สำหรับจำนวนแฝดสาม
-
Traverse array ใช้สาม for loops สำหรับแต่ละองค์ประกอบของ triplet
-
วงนอกสุดจาก 0<=i
-
ตรวจสอบว่า arr[i]*arr[j]*arr[k]==m หรือไม่ ถ้าเป็นจริงจะนับการเพิ่มขึ้น
-
เมื่อสิ้นสุดการวนซ้ำทั้งหมดจะนับจำนวน triplets ทั้งหมดที่ตรงตามเงื่อนไข
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int productisM(int arr[], int n, int m){
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++){
int prod=arr[i]*arr[j]*arr[k];
if(prod==m)
{ count++; }
}
}
}
return count;
}
int main(){
int Arr[]={ 1,2,3,0,2,4 };
int N=6; //length of array
int M=24;
cout <<endl<< "Number of triplets with product M : "<<productisM(Arr,N,M);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Number of triplets with product M: 4