我想创建一个程序,它应该使用 Random no 打印出最简单形式的数学表达式,例如 ( 21 + 13 ) * 56。 1到100,程序必须带一个level参数,level决定生成方程的长度,例如:
游戏必须生成包含加法 + 和乘法 * 运算符的方程式,例如 ( 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
输入将是表单:例如
level 3
输出应该是:
( 21 + 13 ) * 56 // Simple expression using Random no.s
到目前为止,我可以创建不带括号的方程式,但我需要帮助给我可靠的解决方案
这是我到目前为止所做的:
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
}
}
最佳答案
我采用了@plamu 的想法来创建一个二叉树,其中每个 Node 代表一个具有左侧和右侧的运算符。
例如,方程 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 + ')';
}
}
然后您可以创建一个递归函数来构建这样的树,其中一个子树将具有所需 Node 总数的一半(= 方程的长度):
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有一个工作示例。
也许您仍然想关心特殊情况,例如避免在顶层使用括号,但从这里开始应该不会太难。
关于javascript - 在 Javascript 中使用随机数和运算符生成随机数学方程式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936045/