Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số lượng Sextuplet đáp ứng một phương trình bằng cách sử dụng C ++

Trong bài viết này, chúng tôi sẽ mô tả một cách tiếp cận để tìm một số sextuplet thỏa mãn một phương trình. Vì vậy, chúng tôi đang lấy một phương trình làm ví dụ trong đó chúng tôi cần tìm các giá trị của a, b, c, d, e và f thỏa mãn phương trình dưới đây.

( a + b + c ) * e / d = f

Hãy sắp xếp lại phương trình -

( a + b + c ) = ( f * d ) / e

Đây là một ví dụ đơn giản cho vấn đề đã cho -

Input : arr [ ] = { 1, 3 }
Output : 4
Explanation : ( a, b, c, e, f ) = 1, d = 3
   ( a, b, c, d, e ) = 1, f = 3
   ( a, b, c ) = 1, ( d, e, f ) = 3
   ( a, b, c, d, f ) = 3, ( e ) = 1

Input : arr [ ] = { 2, 5 }
Output : 3

Phương pháp tiếp cận để tìm giải pháp

Chúng tôi sẽ sử dụng cách tiếp cận Naive để tìm ra giải pháp cho vấn đề đã cho.

Phương pháp tiếp cận ngây thơ

Trong bài toán này, nhìn vào LHS và RHS, chúng ta có thể tìm thấy tất cả các kết quả có thể có của LHS và lưu trữ trong một mảng, Tương tự như vậy, tạo một mảng cho RHS và điền vào nó với tất cả các kết quả có thể có của RHS.

Kiểm tra cả hai mảng để tìm các giá trị giống nhau và tăng số lượng cho mỗi giá trị được tìm thấy, và cuối cùng hiển thị kết quả.

Ví dụ

#include<bits/stdc++.h>
using namespace std;
int findsamenumbers(int *arr1, int *arr2, int n){
    int i = 0, j = 0, k = 0, count=0;
    while(( i < n*n*n+1) && (j < n*n*n+1)){
        if(arr1[i] < arr2[j])
            i++;
        else if(arr1[i] == arr2[j]){
            count++;
        int temp = arr1[i];
        while(temp==arr1[++i]){
            count++;
        }
        while(temp==arr2[++j]){
            count++;
        }
    }
    else
        j++;
    }  
    return count;
}
int main(){
    int arr[] = {2,5};
    int n = sizeof(arr)/sizeof(arr[0]);
    // Generating all possible values of LHS array
    int index = 0,i;
    int LHS[n*n*n ];
    for ( i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            for(int k = 0; k < n; k++){
                LHS[index++] = (arr[i] * arr[j]) / arr[k];
            }
        }
    }
    // Generating all possible value of RHS array
    int RHS[n*n*n ];
    index=0;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            for (int k = 0; k < n; k++){
                RHS[index++] = (arr[i] + arr[j] + arr[k]);
            }
        }
    }
    sort(RHS, RHS + (n*n*n));
    sort(LHS, LHS + (n*n*n));
    int result = findsamenumbers(LHS, RHS, n);
    cout<<"Number of sextuplets that satisfy an equation: "<<result;
    return 0;
}

Đầu ra

Number of sextuplets that satisfy an equation: 3

Giải thích về Chương trình trên

Trong chương trình này, chúng tôi đang tạo hai mảng để giữ mọi kết quả của LHS và RHS. Chúng tôi đang sử dụng ba vòng lặp lồng nhau để đưa mọi giá trị có thể có của (a, b, c) vào LHS và (d, e, f) trong RHS. Sau đó, chúng tôi sắp xếp cả hai mảng để so sánh cả hai mảng và tìm các giá trị giống nhau trong cả hai mảng, chuyển cả hai mảng tới hàm findamenumber ().

Trong hàm findamenumber (), chúng tôi kiểm tra các giá trị giống nhau bằng cách sử dụng hai vòng lặp lồng nhau. Khi chúng tôi tìm thấy hai phần tử giống nhau, chúng tôi kiểm tra tần suất của số đó trong cả hai mảng để mọi giá trị có thể đều được tính.

if(arr1[i] == arr2[j]){
   count++;
   int temp = arr1[i];
   while(temp==arr1[++i]){
      count++;
   }
   while(temp==arr2[++j]){
      count++;
   }

Kết luận

Trong bài viết này, chúng tôi đã giải quyết số lượng sextuplet thỏa mãn một phương trình trong đó mảng đã cho. Chúng tôi tìm thấy mọi giá trị có thể có của các biến trong phương trình 6 biến (a + b + c) * e / d =f. Chúng tôi có thể giải quyết vấn đề này bằng bất kỳ ngôn ngữ lập trình nào khác như C, Java và python.