a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?
方法1: 不使用算法
let start_time = Date.now();
for(let a=0;a<1001;a++){
for(let b=0;b<1001;b++){
for(let c=0;c<1001;c++){
if(a**2 + b**2 == c**2 && a + b +c == 1000){
console.log(`a, b, c: ${a} ${b} ${c}`);
}
}
}
}
let end_time = Date.now();
console.log(`一共花费的时间为:${(end_time - start_time)/1000}s`);
console.log('结束!');
a, b, c: 0 500 500
a, b, c: 200 375 425
a, b, c: 375 200 425
a, b, c: 500 0 500
一共花费的时间为:2.545s
结束!
方法2: 使用算法
let start_time = Date.now();
for (let a = 0; a < 1001; a++) {
for (let b = 0; b < 1001 - a; b++) {
let c = 1000 - a - b;
if (a ** 2 + b ** 2 == c ** 2) {
console.log(`a, b, c: ${a} ${b} ${c}`);
}
}
}
let end_time = Date.now();
console.log(`一共花费的时间为:${(end_time - start_time) / 1000}s`);
console.log('结束!');
a, b, c: 0 500 500
a, b, c: 200 375 425
a, b, c: 375 200 425
a, b, c: 500 0 500
一共花费的时间为:0.012s
结束!
可见,使用算法的效率远大于不用算法的程序。0.012s VS 2.545s