对于我的作业,我必须允许玩家根据需要从两个不同的列表中选择 6 个数字。
List<Integer> large = Arrays.asList(25, 50, 75, 100);
List<Integer> small = Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
7, 7, 8, 8, 9, 9, 10, 10);
在他们选择了数字(例如 [100, 3, 5, 6, 9, 5])后,他们会生成一个目标数字(例如 299),然后他们只能使用选择的数字作为达到目标的方法。仅使用乘法、加法、减法和除法的目标。因此,他们可以输入例如 100 * 3 + 5 - 6 来达到 299 的目标,并且将对此进行适当的检查和评分。
不幸的是,我真的没有太多可做的,而且我什至不知道如何开始这样做,我不是在寻找直接的答案,也许一些指示或外部帮助会非常感谢。
最佳答案
如果我们遵循 Bedmas(括号指数除法乘加减法),我们可以将其分解为一个简单的函数。
首先将方程转化为组件列表:
100 * 3 + 5 - 6
更改为
["100", "*", "3", "+", "5", "-", "6"]
现在评估每个元素以确保它们有效。 ie) 组件列表中的每个值必须在选择列表中或具有值,*/+-,另外如果有 n 个 num,则应该有 n-1 个 sym
为了获得结果,我们可以评估列表,..按照 bedmas 的顺序合并 num-sym-num 部分
伪:
func int compute_val(ListString eqn)
while not eqn.length is 1
if "*" in eqn
index = eqn.getIndex("*")
replace eqn[index -1:index +1] with str((int) eqn[index -1] * (int)eqn[index +1])
else if "/" in eqn
index = eqn.getIndex("/")
replace eqn[index -1:index +1] with str((int) eqn[index -1] / (int)eqn[index +1])
else if "+" in eqn
index = eqn.getIndex("+")
replace eqn[index -1:index +1] with str((int) eqn[index -1] + (int)eqn[index +1])
else if "-" in eqn
index = eqn.getIndex("-")
replace eqn[index -1:index +1] with str((int) eqn[index -1] - (int)eqn[index +1])
return (int)eqn[0]
这将是在循环中计算方程时列表的进展
["100", "*", "3", "+", "5", "-", "6"] --> ["300", "+", "5", "-", "6"] -->
["305", "-", "6"] --> ["299"]
关于java - 使用特定数字来达到目标数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509715/