我正在花費我的晚上從Kattis處理一些編程問題。有一部分問題4 thought,我卡住了。在進行順序計算時保持操作順序
給出一個數字,該程序應該返回4個數據之間所需的運算(+, - ,*或/)以實現該數字。
例如,輸入
9
會導致輸出
4 + 4 + 4/4 = 9
我的解決方案(效率不高,但是簡單)是評估所有可能的方式向運營商結合上面看如果任何組合達到想要的結果。
要做到這一點,我寫了下面的功能。它需要一組字符串,它們是要評估的運算符(uo[3]
,可能看起來像{+, /, *}
),並且需要的結果爲整數(expRes
)。
bool check(char uo[3], int expRes) {
int res = 4;
for(int oPos = 2; oPos >= 0; oPos--) {
switch (uo[oPos]) {
case '+' : res += 4; break;
case '-' : res -= 4; break;
case '*' : res *= 4; break;
case '/' : res /= 4; break;
}
}
return res == expRes;
}
我意識到這種「順序」方法帶來一個問題:它不遵循操作順序。如果我打電話給 uo = {+, -, /}
和 expRes = 7
這個函數,它會返回false,因爲4 + 4 = 8,8-4 = 4,4/4 = 1. 真正的答案顯然是真的,因爲4 + 4 - 4/4 = 7.
你們有沒有想過重寫函數的方法,以便評估遵循操作順序?
在此先感謝!