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

代数式の最小値を見つけるためのC++プログラム


これは、任意の代数式の最小値を見つけるためのC ++プログラムです。(x1 + x2 + x3+。。。+xa)*(y1 + y2+。。。+yb)および(a + b )整数が与えられます。数値と残りのb数値のすべての可能な組み合わせを検討し、それらの値を計算して、そこから最小値を導き出すことができます。

アルゴリズム

Begin
   function MaxValue() :
   Arguments:
   a[] = array which store the elements.
   x,y = integers.
   Body of the function:
   1) Find the sum of array elements.
   2) Initialize s=0.
   3) Make for loop i = 0 to (x + y)-1 Shift the integers by 25 so that they become positive.
   4) Declare a boolean array p[i][j] that represents true if sum j can be reachable by choosing i numbers.
   5) Initialization of the array.
   6) Make for loop i = 0 to (x + y)-1 to determine If p[i][j] is true, that means it is possible to select i numbers from (x + y) numbers to sum upto j.
   7) Initialize min_value=INF.
   8) Make for loop i = 0 to (MAX * MAX + 1)-1 to Check if a particular sum can be reachable by choosing x numbers.
   if (p[x][i])
      Get the actual sum as we shifted the numbers by 25 to avoid negative indexing in array .
   9) Print the min_value.
End
を出力します

#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
#define MAX 25
int MinValue(int a[], int x, int y) {
   int s= 0;
   for (int i = 0; i < (x + y); i++) {
      s+= a[i];
      a[i] += 25;
   }
   bool p[MAX+1][MAX * MAX + 1];
   //Initialize the array to 01.
   memset(p, 0, sizeof(p));
   p[0][0] = 1;
   for (int i = 0; i < (x + y); i++) {
      // k can be at max x because the
      // left expression has x numbers
      for (int k = min(x, i + 1); k >= 1; k--) {
         for (int j = 0; j < MAX * MAX + 1; j++) {
            if (p[k - 1][j])
               p[k][j + a[i]] = 1;
         }
      }
   }
   int min_value = INF;
   for (int i = 0; i < MAX * MAX + 1; i++) {
      if (p[x][i]) {
         int tmp = i - 25 * x;
         min_value = min(min_value, tmp * (s - tmp));
      }
   }
   cout << "Minimum Value: " << min_value ;
}
int main() {
   int x = 2, y = 2; //input is taken of x and y.
   int ar[] = { 7,6,4,3 };
   MinValue(ar, x, y);
   return 0;
}

出力

Minimum Value: 91

  1. C++で各デカルト座標を接続するための最小コストを見つけるプログラム

    2Dデカルト座標点(x、y)のリストがあるとします。 (x0、y0)と(x1、y1)を接続できます。コストは| x0--x1|です。 + | y0--y1|。任意の数のポイントを接続できる場合は、すべてのポイントがパスで接続されるように、必要な最小コストを見つける必要があります。 したがって、入力がpoints =[[0、0]、[0、2]、[0、-2]、[2、0]、[-2、0]、[2、3]、[2 、-3]]、 (0、0)から(0、2)、(0、-2)、(2、0)、(-2、0)、コストは2、合計は8であるため、出力は14になります。 (2、3)は(0、2)に最も近く、コストは| 2 +1

  2. C++で最小の合計を持つツリーレベルを見つけるプログラム

    二分木があり、そのルートのレベルが1、子のレベルが2などであると仮定します。レベルXのノードのすべての値の合計が最小になるように、最小のレベルXを見つける必要があります。したがって、ツリーが次のような場合- 合計が4– 10 =-6であるため、出力は2になります。これは最小です。 これを解決するには、次の手順に従います- level:=1、sum:=rの値、ansLevel:=level、ansSum:=sum キューqを定義し、指定されたノードrをqに挿入します qが空ではない間 容量:=qのサイズ レベルを1増やし、合計:=0 容量が0では