在Javascript中使用随机数字和运算符生成一个随机math公式

我想创build一个程序,应该打印出最简单的mathexpressionforms,如(21 + 13)* 56使用随机号码。 1到100 ,程序必须采取一个级别参数, 级别决定生成方程的长度 ,例如:

游戏必须产生具有加法+乘法运算符的方程,如(21 + 13)* 56 (使用方括号)

----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 

input将是forms:例如

 level 3 

输出应该是:

 ( 21 + 13 ) * 56 // Simple expression using Random no.s 

到目前为止,我可以创build没有方括号的方程,但是我需要帮助,这将给我可靠的解决scheme

这是我迄今为止所做的:

 var input = 'level 3' input = input.split(' ') var n = Number(input[1]) var x = ['/','*','-','+'] function randomNumberRange(min, max) { return Math.floor(Math.random() * (max - min) + min); } var a = '' for(var i=0;i<n;i++){ if(i !== n-1){ var n1 = randomNumberRange(1, 100) var m = randomNumberRange(0, x.length); var str = x[m]; a += n1 a +=' '+str+' ' }else{ a += n1 } } 

我拿起@plamut的想法来创build一个二叉树,每个节点代表一个左侧和右侧的操作符。

例如,等式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 + ')'; } } 

然后,您可以创build一个recursion函数来构build这样的树,其中一个子树将有一半的所需节点总数(=方程的长度):

 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

也许你仍然想关心特殊情况,比如避免使用顶级的括号,但是从这里不应该太难。