ホームページ  >  記事  >  バックエンド開発  >  C++ で記述され、方程式を満たす 6 タプルの数を見つけます。

C++ で記述され、方程式を満たす 6 タプルの数を見つけます。

王林
王林転載
2023-09-11 17:17:11598ブラウズ

C++ で記述され、方程式を満たす 6 タプルの数を見つけます。

この記事では、式(1)を満たすヘキサグラムを見つける方法を説明します。したがって、方程式を例として、次の式を満たす a、b、c、d、e、f の値を見つける必要があります。

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

方程式を並べ替えてみましょう -

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

これは与えられた問題の簡単な例です -

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

解決策を見つける方法

私たちは素朴なアプローチを使用して、特定の問題に対する解決策を見つけます。

素朴なアプローチ

この問題では、LHS と RHS を観察することで、考えられるすべての LHS の結果を見つけて配列に格納できます。同様に、RHS 配列を作成して、そこに考えられるすべての結果を埋めることができます。 RHSの結果。

2 つの配列が同じ値を持つかどうかを確認し、見つかった値ごとにカウントを増やし、最後に結果を表示します。

#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;
}

出力

Number of sextuplets that satisfy an equation: 3

上記プログラムの説明

このプログラムでは、LHS と RHS をそれぞれ保持する 2 つの配列を作成しました。結果。 3 つのネストされたループを使用して、(a、b、c) のすべての可能な値を LHS に、(d、e、f) のすべての可能な値を RHS に入れます。その後、これら 2 つの配列を並べ替えて比較し、両方の配列で同じ値を見つけて、両方の配列を findsamenumber() 関数に渡します。

findsamenumber() 関数では、2 つのネストされたループを使用して同じ値をチェックします。 2 つの同一の要素が見つかった場合は、考えられる各値の回数を数えるために、両方の配列内のその数値の頻度をチェックします。

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

結論

この記事では、指定された配列の方程式を満たす 6 つ子の数を解きました。 6 変数方程式 (a b c) * e / d = f 内の変数のすべての可能な値を見つけます。この問題は、C、Java、Python などの他のプログラミング言語で解決できます。

以上がC++ で記述され、方程式を満たす 6 タプルの数を見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。