枚举
什么是枚举
将所有可能出现的情况都列举出来就是枚举
例子
口 3x6528=3 口 x8256,在两个口内填入相同的数字使得等式成立。
三行代码枚举解决
for (let i = 0; i < 10; i++) {
if ((i * 10 + 3) * 6528 == (30 + i) * 8256) {
console.log(i);
}
}
练习
现在有 n 根火柴棍,希望拼出形如 A+B=C 的等式。等式中的 A、B、C 均是用火柴棍拼出来的整数(若该数非零,则最高位不能是 0)。数字 0~9 的拼法如下图所示:0123456789
例如现在手上有 14 根火柴棍,则可以拼出两个不同的等式 0+1=1 和 1+0=1。
再例如小哼手上有 18 根火柴棍,则可以拼出 9 个不同的等式,分别为 0+4=4、0+11=111+10=11、2+2=4、2+7=9、4+0=4、7+2=9、10+1=11 和 11+0=11
如何输入一个数,计算出有多少种等式形式?
/**
*
* @param {number} num 需要计算的数
* @return {number} 需要的火柴数
*/
function fn(num) {
const arr = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6];
let num1 = 0;
let num2 = 0;
if (num > 100) return 999;
if (num >= 10) {
num1 = arr[~~(num / 10)];
}
num2 = arr[num % 10];
return num1 + num2;
}
function main(num) {
for (let i = 0; i < 100; i++) {
if (fn(i) >= num) continue;
for (let j = 0; j < 100; j++) {
if (fn(j) >= num) continue;
if (fn(i) + fn(j) + fn(i + j) + 4 == num) {
console.log(`${i}+${j}=${i + j}`);
}
}
}
}
main(18);