回憶一下題意,大概是給定t個四個正整數的四則運算,以形如1x2+3/4的字串形式給出,要求計算各算式是否等於24,分別輸出"yes"或"no"。
考場上的想法是,建立一棵表示式樹,然後遍歷這棵樹,即可算出結果,與24作比較。然後恰巧帶了紫書,紫書中有建表示式樹的板子,就抄了上去。紫書中建的表示式樹是用乙個字元陣列來儲存這棵樹的中序遍歷,於是,只要定義乙個棧,並從後往前遍歷表示式樹的中序遍歷陣列,遇到數字就壓棧,遇到運算符號就彈出棧中的兩個數,並對這兩個數進行相應的運算,得到結果後再把結果壓棧。如此反覆,直到完成遍歷,最後棧中剩餘的數就是最終的結果。
今天查成績,這道題是滿分,而紫書現在不在手邊,暫且就提供乙個思路,等csp題庫更新後上**。
ccf201903 2二十四點
二十四點 使用 3 個加減乘除運算使得 4張紙牌上數字的運算結果為 24。定義每乙個遊戲由 4 個從 1 9 的數字和 3個四則運算符組成,保證四則運算符將數字兩兩隔開,不存在括號和其他字元,運算順序按照四則運算順序進行。其中加法用符號 表示,減法用符號 表示,乘法用小寫字母 x 表示,除法用符號 ...
CCF 201903 2二十四點
棧的簡單應用,中綴表示式的計算。分兩步進行 定義操作符的優先順序,用棧將中綴表示式轉為字尾表示式。再次用棧計算字尾表示式的值。注意 這裡只有加減乘除沒有括號,可以不特意定義優先順序陣列。數字是1 9,直接將數字字元轉成數字即可,不會有大於10的數字。除法是去尾整除,計算過程不會出現小數,都是整數。c...
ccf201903 2二十四點
這個題學了資料結構之後其實非常簡單。就乙個運算子棧digit,乙個操作符棧op.那麼邏輯是,如果是數字,直接進數字棧。如果是操作符 如果棧頂優先順序高於當前操作符。那麼先讓digit棧的棧頂兩元素做當前運算。然後op棧頂彈出,直到棧頂元素的優先順序小於當前的操作符,所以這裡需要加上乙個迴圈。而不是簡...