使用Javascript中的随机数和运算符生成随机数学公式

时间:2015-10-04 17:05:33

标签: javascript node.js string math prototype

我想创建一个程序,应该使用随机数打印出最简单的数学表达式形式,如(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

1 个答案:

答案 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,其中有一个工作示例。

也许你仍然想关注特殊情况,例如避免在顶层使用括号,但这不应该太难了。