2015-04-17 92 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'); 
}