2015-04-17 144 views
0

我有如下數的列表:數學的Javascript計算

1,2,3,4,5,6,7,8 

我如何使用JavaScript來搜索答案下面的等式,而無需重複數的兩倍

() -() = 1 
() +() = 9 
() -() = 2 
() +() = 7 

謝謝

+0

你嘗試什麼嗎?這是HW嗎? –

+8

要麼提出一個算法,要麼使用暴力。但都不是特定於JavaScript。 – Marvin

+0

算法是要走的路,找到「最佳」算法就是你的挑戰 –

回答

0

您可以嘗試用暴力方法解決問題。

用4個項目組成一個數組。

每個項目都是其中一個方程式的所有解法。

方程的解是滿足方程的一組數組。

你最終有7個解決方案的第一個方程,第二個4,第三個6,3第四。

所有可能的組合是7 * 4 * 6 * 3 = 504

檢查第一方程式每個解決方案與秒所有的解決方案等等。......有四個嵌套循環for。確認沒有數字被使用兩次。

問題無解

這裏是一個小提琴

https://jsfiddle.net/vxg9o78t/1/

下面是代碼

solve(); 

function solve() 
{ 
    // solutions 

    var s = 
     [  
      [ 
       [2,1],[3,2],[4,3],[5,4],[6,5],[7,6],[8,7] 
      ], 
      [ 
       [8,1],[7,2],[6,3],[5,4] 
      ], 
      [ 
       [3,1],[4,2],[5,3],[6,4],[7,5],[8,6] 
      ], 
      [ 
       [6,1],[5,2],[4,3] 
      ] 
     ]; 

    // counters 

    var i0,i1,i2,i3; 

    var n0 = s[0].length, 
     n1 = s[1].length,  
     n2 = s[2].length,  
     n3 = s[3].length;  

    // configuration check 

    var a, 
     found, 
     j, 
     foundn; 

    // check every combination of valid solutions 

    foundn = 0; 

    for(i0=0; i0<n0; i0++) 
    { 
     for(i1=0; i1<n1; i1++) 
     { 
      for(i2=0; i2<n2; i2++) 
      { 
       for(i3=0; i3<n3; i3++) 
       { 
        // the array a is used to check how many times 
        // each number is used. Item nr. 0 is unused. 

        a = [0,0,0,0,0,0,0,0,0]; 
        a[s[0][i0][0]]++; 
        a[s[0][i0][1]]++; 
        a[s[1][i1][0]]++; 
        a[s[1][i1][1]]++; 
        a[s[2][i2][0]]++; 
        a[s[2][i2][1]]++; 
        a[s[3][i3][0]]++; 
        a[s[3][i3][1]]++; 
        found = true; 
        for(j=1; j<=8; j++) 
        { 
         if(a[j] > 1) 
         { 
          found = false; 
          break; 
         } 
        } 
        if(found) 
        { 
         console.log(s[0][i0][0] + ' ' + 
            s[0][i0][1] + ' ' + 
            s[1][i1][0] + ' ' + 
            s[1][i1][1] + ' ' + 
            s[2][i2][0] + ' ' + 
            s[2][i2][1] + ' ' + 
            s[3][i3][0] + ' ' + 
            s[3][i3][1]); 
         foundn++; 
        } 
       }  
      } 
     }  
    } 

    console.log('found ' + foundn + ' configurations'); 
}