我正在努力帮助我的儿子解决数学问题.这似乎是让他接触某些节目的好机会.我可以看到递归解决方案,但也许迭代的解决方案更容易解释.到目前为止他学到的语言是SmallBasic,它不能很好地支持递归(没有局部变量).我并不反对教另一种语言,但仍然想要了解是否有一种很好的方法可以在没有递归的情况下解决这个问题.
问题是:给定数字序列1 2 3 4 5 6 7 8 9,在数字之间插入+和 - ,使结果加起来为101.例如,1 + 23 + 4 + 5 + 67-8 + 9 = 101.
递归解决方案看起来像这样:
next(total, number, nextNumber, sequenceString) { //add next(total + number, ...); //subtract next(total - number, ...); //do nothing (multiply) next(total, number * 10, ...); }
是否有一个迭代解决方案,这不是非常复杂?
考虑数字之间的空格1 2 3 4 5 6 7 8 9.有8个这样的间隙空间或槽.
每个这样的空间可以用+, - 或任何东西填充(表示形成更长的数字).
这是八个插槽中每个插槽的三种可能性.将数字分配给三个可能的填充符:
0 --> + 1 --> - 2 --> (nothing)
现在每个8位三位字符串对应一个解决方案.举些例子:
00000000 --> 1+2+3+4+5+6+7+8+9 00000001 --> 1+2+3+4+5+6+7+8-9 00000002 --> 1+2+3+4+5+6+7+89 22222222 --> 123456789
现在编写一个简单的循环,从tr0000的00000000到22222222计数.将上面的每个数字解释为上面的解决方案,一旦遇到产生目标的解决方案就停止,101,如果在没有达到目标值的情况下到达目的地,则报告失败.
对于类固醇有3 ^ 8(指数,不是xor或3**8,或者
3*3*3*3*3*3*3*3
对于强烈的文字思考)可能的解决方案.那只是6561; 你可以非常轻松地以这种方式强行蛮力.