系统地解决代数(蛮力法)

systematically solve algebra (brute force method)

我四处搜索并尝试了自己,但不太清楚该怎么做。

我有一个等式,比如说 a^2 + b^2 = c^2。我想使用 JavaScript (node.js) 找出使这个等式成立的整数 a、b 和 c 必须是多少。显然我们知道它可以是很多东西(例如a = 3, b = 4, and c = 5,但我只是在寻找计算机召集的第一个答案,无论答案是什么。唯一的规范是它必须是大于0的整数, 然后用蛮力法解决它,或者只是插入大量数字直到它为真。

我想到的 example/one 方法是:

var
  a = 1;
  b = 1;
  c = 1;

if (Math.pow(a,2) + Math.pow(b,2) === Math.pow(c,2)) {
    console.log('you did it!');
} else {
    //something such as a++ or idk
  }

如果等式不正确,我不知道该怎么办。我的想法是先给 a 加 1,然后从 a 减 1,然后给 b 加 1,依此类推,直到等式成立......有点像 this here

如果您对如何最好地做到这一点有任何想法,或者如果有人以前解决过这个问题但我找不到来源,请分享!

谢谢

let a,b,c
let high = 100
let low = 1
let checkedValues = []
do {
    a = Math.round(Math.random() * (high - low) + low)
    b = Math.round(Math.random() * (high - low) + low)
    c = Math.round(Math.random() * (high - low) + low)
    if(checkedValues.find(arr => arr.every((v,i)=> v === [a,b,c][i]))) continue
    checkedValues.push([a,b,c])
} while(Math.pow(a,2) + Math.pow(b,2) !== Math.pow(c,2))

console.log('You found a = ', a, ' b = ', b, ' c = ', c)

您正在获取从低到高的随机值。您检查之前是否有回答。然后你把它放在等式中并检查它是否为假,如果是,你得到新的随机数,否则你有很好的答案。

我喜欢这样的练习。我用递归调用做到了。

var checkValues = function(a, b, c) {
    if (Math.pow(a,2) + Math.pow(b,2) === Math.pow(c,2)) {
        return true;
    }
    return false;
}



var MIN = 1;
var MAX = 20;
var a = b = c = MIN;

var valuesGenerator = function(a, b, c) {
console.log("trying: " + a + ' - ' + b + ' - ' + c);
    if(checkValues(a, b, c)) {
        console.log('you did it!');
        console.log("Solution: a - " + a + "   b - " + b + "    c - " + c);
        process.exit();
    }

    // Not got it yet
    if(++c >= MAX) {
        c = MIN;
        if(++b >= MAX) {
            b = MIN;
            if(++a >= MAX) {
                console.log('It seams we did not get a solution :(');
                process.exit();
            }
        }
    }

    // Try new values
    valuesGenerator(a, b, c);
}

valuesGenerator(a, b, c);