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