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

C++で三項式を評価するプログラム


三項式を保持する式があるとすると、式の結果を評価する必要があります。 TrueとFalseのTとF、および「?」などのいくつかの値をサポートします。および「:」文字。いくつかのプロパティがあります:

  • 指定された文字列の長さは10000以下である必要があります。
  • 条件式は右から左にグループ化します。
  • 条件は常にTまたはFのいずれかになります。したがって、条件が数字になることはありません。
  • 式の結果は常にTまたはFに評価されます。

たとえば、入力が「T? T? F:T:T」なので、出力はFになります。

これを解決するには、次の手順に従います。

  • ret:=空の文字列、n:=sのサイズ、
  • スタックstを作成する
  • n –1から0までの範囲のiの場合
    • x:=s [i]
    • stが空でなく、スタックの最上位が「?」の場合、
      • stから削除
      • 最初に:=stの先頭、次にスタックから2つの要素を削除します
      • 2番目:=スタックの一番上、stから削除
      • xがTの場合、最初にstに挿入し、それ以外の場合は2番目にstに挿入します
    • それ以外の場合は、xをstに挿入します
  • stが空でない場合は、
    • ret:=ret+stの先頭とstから削除
  • retを逆にしてretを返す

理解を深めるために、次の実装を見てみましょう。

#include
using namespace std;
class Solution {
   public:
   string parseTernary(string s) {
      string ret = "";
      int n = s.size();
      stack st;
      for(int i = n - 1; i >= 0; i--){
         char x = s[i];
         if(!st.empty() && st.top() == '?'){
            st.pop();
            char first = st.top();
            st.pop();
            st.pop();
            char second = st.top();
            st.pop();
            if(x == 'T'){
               st.push(first);
            }
            else st.push(second);
         }
         else{
            st.push(x);
         }
      }
      while(!st.empty()){
         ret += st.top();
         st.pop();
      }
      reverse(ret.begin(), ret.end());
   return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.parseTernary("T?T?F:T:T"));
}

入力

" T?T?F:T:T"

出力

F

  1. Pythonを使用して式ツリーを構築および評価するプログラム

    式ツリーのポストオーダートラバーサルが与えられたとします。与えられたポストオーダートラバーサルから式ツリーを構築してから、式を評価する必要があります。式ツリーのルートとツリーの評価値を返します。 したがって、入力が次のような場合 その場合、出力は-7になります。 ツリーの入力として指定された接尾辞の順序は、[1、 2、+、 3、 4、+、*]です。評価すると、式は(1 – 2)*(3 + 4);になります。これは-7に相当します。 これを解決するには、次の手順に従います- 左=0右=1 関数evaluate()を定義します。これが定着します ルートの値が数値の場

  2. Pythonの文字列からブール式を評価するプログラム?

    演算子「and」と「or」を含むブール式を含む文字列sがあるとします。それを評価して、結果を返します。ここでは、式に括弧が含まれている場合があります。これを最初に評価する必要があります。 したがって、入力がs =T and(F or T)のような場合、出力はTrueになります これを解決するには、次の手順に従います。 スタック:=新しいリスト t=空白で分割されたsの要素のリスト tのvごとに、実行します v[0]が(と同じ場合、 v [(のインデックスから終了]が Tと同じ場合、スタックにtrueをプッシュします それ以外の場合、「)」が見つかった