呕心沥血算法题——猜算式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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');

猜你喜欢

转载自blog.csdn.net/qq_26924703/article/details/81390945