ccf201903 2二十四點

2021-09-26 22:55:14 字數 1168 閱讀 6000

二十四點:使用 3 個加減乘除運算使得 4張紙牌上數字的運算結果為 24。

定義每乙個遊戲由 4 個從 1-9 的數字和 3個四則運算符組成,保證四則運算符將數字兩兩隔開,不存在括號和其他字元,運算順序按照四則運算順序進行。

其中加法用符號 + 表示,減法用符號 -表示,乘法用小寫字母 x 表示,除法用符號 / 表示。在遊戲裡除法為整除,例如 2 / 3 = 0,3 / 2 = 1, 4 / 2 = 2。

老師給了你 n 個遊戲的解,請你編寫程式驗證每個遊戲的結果是否為 24 。

從標準輸入讀入資料。

第一行輸入乙個整數 n,從第 2 行開始到第 n + 1 行中,每一行包含乙個長度為 7的字串,為上述的 24 點遊戲,保證資料格式合法。

輸出到標準輸出。 包含 n 行,對於每乙個遊戲,如果其結果為 24 則輸出字串 yes,否則輸出字串 no。

10

9+3+4x3

5+4x5x5

7-9-9+8

5x6/5x4

3+5+7+9

1x1+9-9

1x9-5/9

8/5+6x9

6x7-3x6

6x4+4/5

yes

nono

yesyes

nono

noyes

yes

使用stack。

先讀入第乙個數字,入棧。

然後是3次迴圈,每次迴圈讀乙個符號和乙個數字。

在一次迴圈中,讀的符號若為 x 或 / ,則彈出棧頂數字,將其與下一位數字作相應運算後再入棧;讀的符號若為 + 或 - ,則下一位數字直接入棧,注意:若符號為 - ,入棧時入的是相反數(便於最後一次性相加)。

迴圈結束後,將棧內剩餘的數字依次彈出相加。若為24,則yes。

#includeusing namespace std;

int main()

else if(c=='/')

else if(c=='+')

else

} int count=0;

while (!s.empty())

//cout

else

} return 0;

}

CCF 201903 2二十四點

棧的簡單應用,中綴表示式的計算。分兩步進行 定義操作符的優先順序,用棧將中綴表示式轉為字尾表示式。再次用棧計算字尾表示式的值。注意 這裡只有加減乘除沒有括號,可以不特意定義優先順序陣列。數字是1 9,直接將數字字元轉成數字即可,不會有大於10的數字。除法是去尾整除,計算過程不會出現小數,都是整數。c...

ccf201903 2二十四點

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

CCF 201903 2 二十四點

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