0
我有如下數的列表:數學的Javascript計算
1,2,3,4,5,6,7,8
我如何使用JavaScript來搜索答案下面的等式,而無需重複數的兩倍
() -() = 1
() +() = 9
() -() = 2
() +() = 7
謝謝
我有如下數的列表:數學的Javascript計算
1,2,3,4,5,6,7,8
我如何使用JavaScript來搜索答案下面的等式,而無需重複數的兩倍
() -() = 1
() +() = 9
() -() = 2
() +() = 7
謝謝
您可以嘗試用暴力方法解決問題。
用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');
}
你嘗試什麼嗎?這是HW嗎? –
要麼提出一個算法,要麼使用暴力。但都不是特定於JavaScript。 – Marvin
算法是要走的路,找到「最佳」算法就是你的挑戰 –