我想创建一个程序,应该使用随机数打印出最简单的数学表达式形式,如(21 + 13)* 56。 1到100 ,程序必须采用级别参数,级别确定生成的等式的长度,例如:
游戏必须使用加号+和乘法*运算符生成方程式,如(21 + 13)* 56。(使用括号)
one-task-process.bpmn20.xml
输入将是形式:例如
----level 2
75 - 54 = 21
62 + 15 = 77
88 / 22 = 4
93 + 22 = 115
90 * 11 = 990
--level 3
( 21 + 13 ) * 56 = 1904
82 - 19 + 16 = 79
51 * ( 68 - 2 ) = 3366
输出应为:
level 3
到目前为止,我可以创建没有括号的方程式,但我需要帮助,这将给我可靠的解决方案
这是我到目前为止所做的:
( 21 + 13 ) * 56 // Simple expression using Random no.s
答案 0 :(得分:3)
我选择@plamut的想法来创建一个二叉树,其中每个节点代表一个左侧和右侧的运算符。
例如,等式2 * (3 + 4)
可以看作是
*
/ \
2 +
/ \
3 4
您可以使用以下对象直截了当地表示这一点:
var TreeNode = function(left, right, operator) {
this.left = left;
this.right = right;
this.operator = operator;
this.toString = function() {
return '(' + left + ' ' + operator + ' ' + right + ')';
}
}
然后你可以创建一个递归函数来构建这样的树,其中一个子树将具有所需总节点数的一半(=方程的长度):
function buildTree(numNodes) {
if (numNodes === 1)
return randomNumberRange(1, 100);
var numLeft = Math.floor(numNodes / 2);
var leftSubTree = buildTree(numLeft);
var numRight = Math.ceil(numNodes / 2);
var rightSubTree = buildTree(numRight);
var m = randomNumberRange(0, x.length);
var str = x[m];
return new TreeNode(leftSubTree, rightSubTree, str);
}
这里有一个JSFiddle,其中有一个工作示例。
也许你仍然想关注特殊情况,例如避免在顶层使用括号,但这不应该太难了。