CCF演算法筆記2 二十四點

2021-09-26 11:02:51 字數 1739 閱讀 8749

分析:題目很容易理解,我們只需要模擬四則運算即可,題目設限簡單,我們只需要進行四個個位數的加減乘除運算即可,並且還不包括括號。當結果等於24時,即可輸出結果「yes」,否則輸出「no」。

這道題的解題方法有很多,

首先最簡單的暴力法,因為只設計到四個個個位數加減,我們只需要把所有情況都列出來即可,一共4^3=64種,這種方法空間占用比較少,因為沒有涉及到stl,但是時間比較多,因為需要逐個判斷。

經典的四則運算用到的棧的方法,生成兩個棧,分別儲存數字和符號,當遇到+、-時符號直接入棧,當遇到*、/時,先計算符號前後兩個數再入棧,最後遍歷數字棧,插入+、-號,通過數字出棧入棧,棧得到的最後乙個數即最終結果。

**,窮舉法的:

#include //標頭檔案不需要這麼多,習慣粘上所有的

#include #include //自動排序, 不可重複 unordered_set

#include #include //char , string

#include #include //sort() cmp

#include #include //map a; a.insert(pair,()) a[10]="qewe";

#include #include //cout

using namespace std;

int main()

else if(s[3]=='-')

else if(s[3]=='/')

else

}else if(s[1]=='-')

else if(s[3]=='-')

else if(s[3]=='/')

else

}else if(s[1]=='/')

else if(s[3]=='-')

else if(s[3]=='/')

else

}else

else if(s[3]=='-')

else if(s[3]=='/')

else

}// cout棧的方法,這個是我自己寫的,測試沒有問題,但是有部分測試點無法通過,有大神知道問題可以給我說一下,,

#include #include #include //自動排序, 不可重複 unordered_set

#include #include //擦汗ar , string

#include #include //sort() cmp

#include #include //map a; a.insert(pair,()) a[10]="qewe";

#include #include //cout

#include using namespace std;

int main()

else if(s[i]=='/')

else

if(a[j]=='+')

else

if(a[j]=='-')

else

if(a[j]=='x')

else

j++;

}while(!num.empty())

if(all==24) printf("yes\n");

else printf("no\n");

} return 0;

}

ccf201903 2二十四點

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

CCF 201903 2二十四點

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

ccf201903 2二十四點

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