版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26924703/article/details/81390945
// 看下面的算式:
// □□ x □□ = □□ x □□□
// 它表示:两个两位数相乘等于一个两位数乘以一个三位数。
// 如果没有限定条件,这样的例子很多。
// 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
// 该算式中1至9的每个数字出现且只出现一次!
// 比如:
// 46 x 79 = 23 x 158
// 54 x 69 = 27 x 138
// 54 x 93 = 27 x 186
// .....
// 请编程,输出所有可能的情况!
// 注意:
// 左边的两个乘数交换算同一方案,不要重复输出!
// 不同方案的输出顺序不重要
let checkArray = new Array();
function check(num1, num2, num3, num4) {
if (num1 * num2 == num3 * num4) {
if (num1 > num2) {
let temp = num1;
num1 = num2;
num2 = temp;
}
let str = num1 + "×" + num2;
if (checkArray.indexOf(str) == -1) {
checkArray.push(str);
return true;
}
}
return false;
}
function allSort(a, start, end) {
if (start > end) {
// 做一些想要的操作
let num1 = a[0] * 10 + a[1];
let num2 = a[2] * 10 + a[3];
let num3 = a[4] * 10 + a[5];
let num4 = a[6] * 100 + a[7] * 10 + a[8];
if (check(num1, num2, num3, num4)) {
let str = num1 + '×' + num2 + '=' + num3 + '×' + num4;
console.log(str);
}
} else {
for (let i = start; i <= end; i++) {
let temp = a[i];
a[i] = a[start];
a[start] = temp;
allSort(a, start + 1, end);
temp = a[i];
a[i] = a[start];
a[start] = temp;
}
}
}
let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.time('allSort');
allSort(a, 0, a.length - 1);
console.timeEnd('allSort');