Головоломка
Волшебная площадь третьего уровня. Попробуйте заполнить 9 различных целых чисел, 1 ~ 9, в таблицу 3 × 3, чтобы сумма чисел в каждой строке, каждый столбец и каждый диагональ одинакова.
Стратегия
Источенный поиск. Перечислите все целочисленные схемы заполнения и фильтр.
JavaScript Solution
Кода -копия выглядит следующим образом:
/**
* Создан Чао 28.12.14.
*/
Функция getpermutation (arr) {
if (arr.length == 1) {
вернуть [arr];
}
var permucte = [];
for (var i = 0; i <arr.length; i ++) {
var firstele = arr [i];
var arrclone = arr.slice (0);
arrclone.splice (i, 1);
var Childpermutation = getpermution (arrclone);
for (var j = 0; j <childpermutation.length; j ++) {
Childpermution [j]. Unshift (Firstele);
}
перестановка = перестановка. Concat (ChildPermutation);
}
вернуть перестановку;
}
Функция validateCandidate (кандидат) {
var sum = кандидат [0] + кандидат [1] + кандидат [2];
для (var i = 0; i <3; i ++) {
if (! (sumofline (кандидат, i) == sum && sumofcolumn (кандидат, i) == sum)) {
вернуть ложь;
}
}
if (sumofdiagonal (кандидат, true) == sum && sumofdiagonal (кандидат, false) == sum) {
вернуть истину;
}
вернуть ложь;
}
Функция sumofline (кандидат, строка) {
вернуть кандидат [строка*3] + кандидат [строка*3 + 1] + кандидат [строка*3 + 2];
}
Функция sumofcolumn (кандидат, col) {
вернуть кандидат [col] + кандидат [col + 3] + кандидат [col + 6];
}
функция sumofdiagonal (кандидат, isforwardslash) {
вернуть isforwardslash? Кандидат [2]+кандидат [4]+кандидат [6]: кандидат [0]+кандидат [4]+кандидат [8];
}
var перестановка = getpermution ([1,2,3,4,5,6,7,8,9]);
кандидат в VAR;
for (var i = 0; i <перестановка.length; i ++) {
кандидат = перестановка [i];
if (validateCandidate (кандидат)) {
перерыв;
} еще {
кандидат = null;
}
}
if (кандидат) {
console.log (кандидат);
} еще {
console.log ('не найдено достоверного результата);
}
результат
Кода -копия выглядит следующим образом:
[2, 7, 6, 9, 5, 1, 4, 3, 8]
Изображение как волшебный квадрат:
Кода -копия выглядит следующим образом:
2 7 6
9 5 1
4 3 8
анализировать
Используя эту стратегию, вы можете теоретически получить решения любого магического квадрата N-порядка, но на самом деле вы можете получить только конкретное решение волшебного квадрата третьего порядка, потому что, когда n> 3, трудоемкая операция по получению всех схем заполнения станет чрезвычайно огромной.