題解學習 CCF 2019 3 二十四點遊戲

2021-09-27 02:11:05 字數 777 閱讀 9531

(學習題解總結)

恩師的題解,總是充滿了感動———總是那麼精簡,耗時總是所有題解中最少的。二十四點遊戲竟然耗時0ms,下面聊聊我自己的學習體會以及中間走過的坑:

1.運算子和數字分別用char op[3]和int a[4]來儲存,中間有乙個a[i] = s[2 * i] - '0';,這是由於字元陣列中儲存的是ascii碼,減去『0』才是真正儲存的數字;

2.該題解使用了judge函式,不像以前見過的是 :void 函式名() 的畫風,這是因為返回的,是該函式所得結果是否是24的問題。

3.數字和運算子儲存好後,主要讓人頭疼的便是運算優先順序了:先算』x』,』/』!

因此正如題解中所寫:

for(i = 0; i < k; i++)

if(op[i] == 'x' || op[i] == '/')

k--, i--;

}

中間還好說,但之後的for迴圈就讓我矇圈了。經過手動的推導,才發現這和if語句中

`a[i] = a[i] + a[i + 1];

有關,就舉「6x4+4/5」的例子吧:因為這樣a[0]和a[1]合為a[0],自然後面儲存數字和字元的下標都要提前因此有

for(j = i + 1; j < k; j++)
而總體也少一,因此k- -,而又因為之前將運算結果都給了a[i],故i- -.

ccf201903 2二十四點

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

CCF 201903 2二十四點

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

ccf201903 2二十四點

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