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
-
Pythonを使用して式ツリーを構築および評価するプログラム
式ツリーのポストオーダートラバーサルが与えられたとします。与えられたポストオーダートラバーサルから式ツリーを構築してから、式を評価する必要があります。式ツリーのルートとツリーの評価値を返します。 したがって、入力が次のような場合 その場合、出力は-7になります。 ツリーの入力として指定された接尾辞の順序は、[1、 2、+、 3、 4、+、*]です。評価すると、式は(1 – 2)*(3 + 4);になります。これは-7に相当します。 これを解決するには、次の手順に従います- 左=0右=1 関数evaluate()を定義します。これが定着します ルートの値が数値の場
-
Pythonの文字列からブール式を評価するプログラム?
演算子「and」と「or」を含むブール式を含む文字列sがあるとします。それを評価して、結果を返します。ここでは、式に括弧が含まれている場合があります。これを最初に評価する必要があります。 したがって、入力がs =T and(F or T)のような場合、出力はTrueになります これを解決するには、次の手順に従います。 スタック:=新しいリスト t=空白で分割されたsの要素のリスト tのvごとに、実行します v[0]が(と同じ場合、 v [(のインデックスから終了]が Tと同じ場合、スタックにtrueをプッシュします それ以外の場合、「)」が見つかった