【背景】二十四點是一款著名的紙牌遊戲,其遊戲的目標是使用 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
【輸出樣例】
yesno
noyes
yesno
nono
yesyes
【樣例解釋】
9+3+4 × 3 = 24
5+4 × 5 × 5 = 105
7 − 9 − 9+8= −3
5 × 6/5 × 4 = 24
3 + 5 + 7 + 9 = 24
1 × 1+9 − 9=1
1 × 9 − 5/9 = 9
8/5 + 6 × 9 = 55
6 × 7 − 3 × 6 = 24
6 × 4 + 4/5 = 24
【提示】
【解題思路】
暴力求解
【參考**】
#include
using namespace std;
int main()
switch(c[0])
break;
case '-':
switch(c[2])
break;
case 'x':
switch(c[2])
break;
case '/':
switch(c[2])
break;
}break;
case '-':
switch(c[1])
break;
case '-':
switch(c[2])
break;
case 'x':
switch(c[2])
break;
case '/':
switch(c[2])
break;
}break;
case 'x':
result[i]=a[0]*a[1];
switch(c[1])
break;
case '-':
switch(c[2])
break;
case 'x':
result[i]=result[i]*a[2];
switch(c[2])
break;
case '/':
result[i]=result[i]/a[2];
switch(c[2])
break;
} break;
case '/':
result[i]=a[0]/a[1];
switch(c[1])
break;
case '-':
switch(c[2])
break;
case 'x':
result[i]=result[i]*a[2];
switch(c[2])
break;
case '/':
result[i]=result[i]/a[2];
switch(c[2])
break;
} break;}}
for(int k=0;k
if(result[k]==24) cout<
else cout<
}
ccf201903 2二十四點
二十四點 使用 3 個加減乘除運算使得 4張紙牌上數字的運算結果為 24。定義每乙個遊戲由 4 個從 1 9 的數字和 3個四則運算符組成,保證四則運算符將數字兩兩隔開,不存在括號和其他字元,運算順序按照四則運算順序進行。其中加法用符號 表示,減法用符號 表示,乘法用小寫字母 x 表示,除法用符號 ...
CCF 201903 2二十四點
棧的簡單應用,中綴表示式的計算。分兩步進行 定義操作符的優先順序,用棧將中綴表示式轉為字尾表示式。再次用棧計算字尾表示式的值。注意 這裡只有加減乘除沒有括號,可以不特意定義優先順序陣列。數字是1 9,直接將數字字元轉成數字即可,不會有大於10的數字。除法是去尾整除,計算過程不會出現小數,都是整數。c...
ccf201903 2二十四點
這個題學了資料結構之後其實非常簡單。就乙個運算子棧digit,乙個操作符棧op.那麼邏輯是,如果是數字,直接進數字棧。如果是操作符 如果棧頂優先順序高於當前操作符。那麼先讓digit棧的棧頂兩元素做當前運算。然後op棧頂彈出,直到棧頂元素的優先順序小於當前的操作符,所以這裡需要加上乙個迴圈。而不是簡...