CCF 201903 2二十四點

2021-09-29 04:06:47 字數 1282 閱讀 8999

棧的簡單應用,中綴表示式的計算。

分兩步進行:

定義操作符的優先順序,用棧將中綴表示式轉為字尾表示式。

再次用棧計算字尾表示式的值。

注意

這裡只有加減乘除沒有括號,可以不特意定義優先順序陣列。

數字是1-9,直接將數字字元轉成數字即可,不會有大於10的數字。

除法是去尾整除,計算過程不會出現小數,都是整數。

//

// created by onwaier lee on 2019-10-30.

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

intmain()

else

if(ch ==

'+'|| ch ==

'-')

op.push

(ch);}

else

op.push

(ch);}

}while

(!op.

empty()

)/** post為字尾表示式,注意字尾表示式中的數字都是0-9,並且除都是去尾。

* 需要用另乙個棧儲存數字

*/for(

auto ch:post)

else}}

if(res.

top()==

24)else

}return0;

}

這個如果你忘了中綴如何轉字尾,可以用暴力求解。畢竟運算子組合情況也就23=

82^3 =8

23=8

種情況,完全可以列舉計算的。

+與-視為相同的,乘除視為相同的。這裡以+和x為例。

所有組合情況為:

++++x+

++x+xx

x++xx+

x+***x

然後直接計算即可。

**略。

github位址

ccf201903 2二十四點

二十四點 使用 3 個加減乘除運算使得 4張紙牌上數字的運算結果為 24。定義每乙個遊戲由 4 個從 1 9 的數字和 3個四則運算符組成,保證四則運算符將數字兩兩隔開,不存在括號和其他字元,運算順序按照四則運算順序進行。其中加法用符號 表示,減法用符號 表示,乘法用小寫字母 x 表示,除法用符號 ...

ccf201903 2二十四點

這個題學了資料結構之後其實非常簡單。就乙個運算子棧digit,乙個操作符棧op.那麼邏輯是,如果是數字,直接進數字棧。如果是操作符 如果棧頂優先順序高於當前操作符。那麼先讓digit棧的棧頂兩元素做當前運算。然後op棧頂彈出,直到棧頂元素的優先順序小於當前的操作符,所以這裡需要加上乙個迴圈。而不是簡...

CCF 201903 2 二十四點

分析乘除的優先順序高於加減,因此應該先計算乘除的部分,然後再將各部分加減起來。也就是將表示式先拆解成不含加減的子式,然後計算出各個子式的值累加起來即可。用分治的策略比較簡單好寫,過程如下 對於一段表示式,如果含有加減運算子,則將表示式從運算子拆解成左右兩個子式求解。遞迴分解直到所有子表示式都不含有加...