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

C++で1つ欠落しているn個の和分方程式からn個の変数を検索します


この問題では、(n-1)個の変数の合計で構成される配列sum[]が与えられます。

Sum[1] = x2 + x3 + x4 + … xn
Sum[2] = x1 + x3 + x4 + … xn
.
.
Sum[i] = x2 + x3 + x4 + … x(i-1) + x(i+1) + … + xn
.
.
Sum[n] = x1 + x2 + x3 + … x(n-1)
Our task is to find the value of x1, x2,... xn.

問題を理解するために例を見てみましょう

入力

sum[] = {6, 6, 6, 6, 6, 6, 6}

出力

x1 = 1, x2 = 1, x3 = 1, x4 = 1, x5 = 1, x6 = 1, x7 = 1

説明

arr[1] = 1 + 1 + 1 + 1 + 1 + 1 = 6

ソリューションアプローチ

すべての変数の合計をsumX、

とします。

sumX =x1 + x2 +x3+…+xn

したがって、合計配列の値は-

です。
sum[1] = x2 + x3 + x4 + … xn
= -x1 + x1 + x2 + x3 + x4 + … xn
= sumX - x1

同様に、

sum[2] = sumX - x2
sum[3] = sumX - x3
.
sum[i] = sumX - xi
.
sum[n] = sumX - xn

取得したすべての合計配列を追加します。

Sum[1] + sum[2] + … sum[n] = sumX - x1 + sumX - x2 + … + sumX - xn
arrSum = n*sumX - (x1 + x2 + x3 … xn)
arrSum = n*SumX - (x1 + x2 + x3 … xn)
arrSum = sumX*(n-1)
sumX = arrSum/ (n-1)

このsumXの値を使用して、x1、x2…

の値を見つけることができます。

だから、

x1 = sumX - sum[1]
x2 = sumX - sum[2]
..
xi = sumX - sum[i]
..
xn = sumX - sum[n]

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
void calcSumVariables(int sum[], int n) {
   float SUMX = 0;
   for (int i = 0; i < n; i++) {
      SUMX += sum[i];
   }
   SUMX /= (n - 1);
   for (int i = 0; i < n; i++)
      cout<<"\nx"<<(i + 1)<<" = "<<(SUMX - sum[i]);
}
int main(){
   int sum[] = {3, 8, 6, 7, 4, 5, 9 };
   int N = sizeof(sum) / sizeof(sum[0]);
   cout<<"The value of variables that form the sum are ";
   calcSumVariables(sum, N);
   return 0;
}

出力

合計を形成する変数の値は次のとおりです

x1 = 4
x2 = -1
x3 = 1
x4 = 0
x5 = 3
x6 = 2
x7 = -2

  1. C++の平衡二分探索木で与えられた合計を持つペアを見つけます

    平衡二分探索木とターゲット合計があるとすると、合計がターゲット合計に等しいペアであるかどうかをチェックするメソッドを定義する必要があります。この場合。二分探索木は不変であることに注意する必要があります。 したがって、入力が次のような場合 その場合、出力は(9 + 26 =35)になります。 これを解決するには、次の手順に従います- スタックs1、s2を定義する done1:=false、done2:=false val1:=0、val2:=0 curr1:=root、curr2:=root 無限ループ、実行- done1がfalseの場合、do − curr1が

  2. C ++を使用して、マトリックス内の合計が最大の列を検索します。

    サイズがMxNの行列があるとします。合計が最大の列を見つける必要があります。このプログラムでは、トリッキーなアプローチには従わず、配列を列ごとにトラバースし、各列の合計を取得します。合計が最大の場合は、合計と列インデックスを出力します。 例 #include<iostream> #define M 5 #define N 5 using namespace std; int colSum(int colIndex, int mat[M][N]){    int sum = 0;    for(int i = 0; i<M; i++){