【发布时间】:2017-07-17 19:46:40
【问题描述】:
我整个晚上都在做一些来自 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。
你们中的任何人都可以想出一种方法来重写函数以使评估遵循操作顺序吗?
提前致谢!
【问题讨论】: