เราได้รับอาร์เรย์ 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