2015-10-04 46 views
6

我想創建一個程序,應打印輸出數學表達式的最簡單的形式就像使用隨機無(21 + 13)* 56。 1至100,該程序必須採取一個水平參數,所述水平確定長度所產生的方程的,例如:生成使用隨機數和運算符的隨機數學方程式在Javascript

遊戲必須產生具有加法+和乘法方程*運營商如(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 
    } 
} 
+2

不是一個完整的答案,但只是一個想法,你可以做到這一點:想想你會如何表示一個包含括號的方程 - 樹會成爲我的第一個選擇。然後計算方程只是遞歸評估樹根和它的子樹的問題。 「Level」也很容易計算,其他操作也可能相同(對不起,如果我不能提供任何具體的代碼示例,但我目前時間不足 - 我可能會在未來幾天內做到這一點,但我不能答應任何:))。 – plamut

回答

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的示例。

也許你仍然想關心特殊情況,比如避免在頂層使用括號,但是從這裏不應該太難。

+0

這正是我想寫的答案,只要我在工作週期間找到它的時間。我相信這會給OP提供足夠的信息繼續下去,做好工作! – plamut

+0

@plamut和Cedric感謝您的幫助,現在我將嘗試編寫程序來解決生成的等式,但我們如何才能提出樹的概念?那意味着我應該對數據結構有深刻的理解? –

+0

那麼,這樣的結構在計算機科學中是相當常見的,取決於你在做什麼,編程時你將面臨更多的問題。掌握數據結構和算法的基礎知識總是有用的。如果你認爲自己缺乏這個功能,那麼你可以看看幾本很棒的書。 –