C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用して方程式を満たす六つ子の数を見つける


この記事では、方程式を満たす多数の六つ子を見つけるためのアプローチについて説明します。したがって、以下の方程式を満たす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のすべての可能な結果で埋めます。

両方の配列で同じ値をチェックし、見つかった各値のカウントをインクリメントして、最終的に結果を表示します。

#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つの配列を作成しています。 (a、b、c)のすべての可能な値をLHSに、(d、e、f)をRHSに配置するために、3つのネストされたループを使用しています。その後、両方の配列を並べ替えて両方の配列を比較し、両方の配列で同じ値を見つけて、両方の配列を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つの変数方程式(a + b + c)* e / d=fで変数のすべての可能な値を見つけました。この問題は、C、Java、Pythonなどの他のプログラミング言語で解決できます。


  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります