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

C++で特定の式のすべての可能な結果を​​検索します


括弧なしの算術式があるとします。私たちの仕事は、その表現のすべての可能な結果を​​見つけることです。式が1+2 * 3-4のようであるとすると、これは次のように解釈できます-

  • 1+(2 *(3-4))=1 +(2 * -1)=-1
  • (1 + 2)*(3-4)=3 * -1 =-3
  • 1 +((2 * 3)-4)=1 +(6-4)=3
  • ((1 + 2)* 3)-4 =(3 * 3)-4 =5
  • 1+(2 * 3)-4 =1 + 6 – 4 =3

この問題を解決するには、次の手順に従う必要があります-

  • 最初にresを空に設定します

  • すべての演算子xについて、次のようにします-

    • xの左側にあるすべての可能な値を再帰的に評価し、値のリストをL

      とします。
    • xの右側にあるすべての可能な値を再帰的に評価し、値のリストをR

      とします。
    • Lのすべての値をループします:

      • R-

        のすべての値をループします
        • LとRの現在の要素に現在の演算子xを適用し、評価された値をresに追加します

  • 解像度を出力として返します

#include<iostream>
#include<vector>
using namespace std;
int solve(int a, char op, int b) {
   if (op=='+')
      return a+b;
   if (op=='-')
      return a-b;
   if (op == '*')
      return a*b;
}
vector<int> getAllResults(string expr, int low, int high) {
   vector<int> res;
   if (low == high) {
      res.push_back(expr[low] - '0');
      return res;
   }
   if (low == (high-2)) {
      int num = solve(expr[low]-'0', expr[low+1], expr[low+2]-'0');
      res.push_back(num);
      return res;
   }
   for (int i=low+1; i<=high; i+=2) {
      vector<int> L = evaluateAll(expr, low, i-1);
      vector R = evaluateAll(expr, i+1, high);
      for (int s1=0; s1<L.size(); s1++) {
         for (int s2=0; s2<R.size(); s2++) {
            int val = solve(L[s1], expr[i], R[s2]);
            res.push_back(val);
         }
      }
   }
   return res;
}
int main() {
   string expr = "1+2*3-4";
   vector<int> ans = getAllResults(expr, 0, expr.length()-1);
   for (int i=0; i< ans.size(); i++)
      cout << ans[i] << endl;
}

出力

2 1 4 3 5 6 7 8

  1. C ++を使用して、指定された数まで加算されるすべての組み合わせを検索します

    正の数nがあるとします。正の数のすべての組み合わせを見つける必要があります。これは、その数になります。ここでは、順列ではなく、組み合わせのみが必要です。値n=4の場合、[1、1、1、1]、[1、1、2]、[2、2]、[1、3]、[4]になります。 これは再帰を使用して解決します。組み合わせを格納する配列があり、再帰的アプローチを使用してその配列を埋めます。各組み合わせは、要素の昇順で保存されます。 例 #include<iostream> using namespace std; void getCombination(int arr[], int index, int num,

  2. 与えられた数のリストのすべての可能な組み合わせを生成するC++プログラム

    これは、特定の数値リストの可能なすべての組み合わせを生成するC++プログラムです アルゴリズム Begin    Take the number of elements and the elements as input.    function Combi(char a[], int reqLen, int s, int currLen, bool check[], int l) :    If currLen>reqLen then    Return    Else if currL