網易遊戲程式設計第二題 表示式求值

2021-08-17 09:52:29 字數 1131 閱讀 2766

題目:

給定乙個表示式,該表示式由以下規則生成:

1.「0」和「1」是合法表示式;

2.如果x是乙個合法表示式,那麼「(!x)」是乙個合法表示式;

3.如果x和y是合法表示式,那麼「(x|y)」和「(x&y)」都是乙個合法表示式;

其中,!是邏輯非操作符,|和&分別是與運算子和或運算子,給定乙個合法表示式,求該表示式最終的值。

輸入描述:

第一行是乙個整數t(t<=20)。接下來t行,每一行是乙個合法表示式。表示式不含空格,且輸入保證該表示式是乙個合法表示式。

對於30%的資料,表示式的長度不超過500;對於100%的資料,表示式的長度不超過150000。

輸出描述:

t行,每一行表示相應表示式的值。

示例:輸入:

(!0)

(0|(1&0))

(0|(1&(!0)))

輸出:思路:建立兩個棧,每當遇到非數字字元時,除了符號')',全部壓入第乙個棧中,當遇到數字時,壓入第二個棧;當遇到符號')'時,則從第二個棧中彈出棧頂數字,第乙個棧彈出符號,直到第乙個棧彈出的是符號'('為止,則退出這輪計算,最後把計算結果壓入第二個數字棧中,以備下次繼續計算。

**:

#include #include #include using namespace std;

//注意:這個**的執行前提條件是這個表示式合法,這裡根據測試用例測試,就不多加考慮

int count_number(char * str)

else if(*str == '0' || *str == '1')

else if(*str == ')')//遇到')'進行棧內資料和符號計算

else if(tmp1 == '&')

else if(tmp1 == '!')

tmp1 = stack1.top();

stack1.pop();

}stack2.push(a);//將這一次的計算結果壓入數字棧stack2中,以備下次繼續計算

}str++;

} return (stack2.top());

}int main()

cout<<"結果:"

}

網易測評題 表示式求值

今天上課,老師教了小易怎麼計算加法和乘法,乘法的優先順序大於加法,但是如果乙個運算加了括號,那麼它的優先順序是最高的。例如 12 341 23 7 1 2 3 5 123 6 1 2 3 9 現在小易希望你幫他計算給定3個數a,b,c,在它們中間新增 符號,能夠獲得的最大值。輸入描述 一行三個數a,...

表示式求值(2019網易程式設計題)

今天上課,老師教了小易怎麼計算加法和乘法,乘法的優先順序大於加法,但是如果乙個運算加了括號,那麼它的優先順序是最高的。例如 1 2 3 4 1 2 3 7 1 2 3 5 1 2 3 6 1 2 3 9 現在小易希望你幫他計算給定3個數a,b,c,在它們中間新增 符號,能夠獲得的最大值。輸入描述 一...

程式設計題 奇怪的表示式求值

常規的表示式求值,我們都會根據計算的優先順序來計算。比如 的優先順序就高於 但是小易所生活的世界的表示式規則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表示式中沒有 只有 和 現在給出乙個表示式,需要你幫忙計算出小易所在的世界這個表示式的值為多少 輸入描述 輸入為一行字串,即乙個...