Chúng ta được cho một mảng Arr [] gồm các số nguyên có độ dài n và một số M. Mảng chỉ chứa các số nguyên dương. Mục đích là đếm bộ ba phần tử của Arr [] có tích bằng M.
Chúng tôi sẽ làm điều này bằng cách sử dụng ba vòng lặp for. Số lượng tăng lên nếu arr [x] * arr [y] * arr [z] =M và x! =Y! =Z. (0 <=x, y, z
Hãy cùng hiểu với các ví dụ.
Đầu vào
arr[]= { 1,2,3,0,2,4 }, M=24
Đầu ra
Number of triplets with product M: 2
Giải thích
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
Đầu vào
arr[]= {2,2,2,2,2}, M=6
Đầu ra
Number of triplets with product M: 0
Giải thích
Every triplet has product equal to 8 Total triplets: 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 yitisM (int arr [], int n, int m) nhận một mảng, độ dài của nó trả về bộ ba trong đó tích bằng m.
-
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] ==m hay không. Nếu đúng thì số gia tăng.
-
Ở cuối tất cả các vòng đếm sẽ có tổng số bộ ba đáp ứng điều kiện.
-
Trả về kết quả là số lượng.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Number of triplets with product M: 4