我正在花费我的晚上从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.
你们有没有想过重写函数的方法,以便评估遵循操作顺序?
在此先感谢!