Puzzle
Square magique de troisième niveau. Essayez de remplir 9 entiers différents, 1 ~ 9, dans une table 3 × 3, de sorte que la somme des nombres sur chaque ligne, chaque colonne et chaque diagonale est la même.
Stratégie
Recherche épuisée. Énumérez tous les schémas de remplissage entiers et filtrez.
Solution javascript
La copie de code est la suivante:
/ **
* Créé par Chao le 28/12/14.
* /
fonction getpermutation (arr) {
if (arr.length == 1) {
return [arr];
}
Var Permutation = [];
pour (var i = 0; i <arr.length; i ++) {
var PremierEle = arr [i];
var arrclone = arr.slice (0);
Arrclone.splice (i, 1);
var childpermutation = getpermutation (arrclone);
pour (var j = 0; j <childpermutation.length; j ++) {
ChildPermutation [J] .UnShift (Firsele);
}
permutation = permutation.concat (ChildPermutation);
}
retour permutation;
}
fonction validatecanate (candidat) {
var sum = candidat [0] + candidat [1] + candidat [2];
pour (var i = 0; i <3; i ++) {
if (! (sumOfline (candidat, i) == sum && sumofColumn (candidat, i) == sum)) {
retourne false;
}
}
if (sumofdiagonal (candidat, true) == sum && sumofdiagonal (candidat, false) == sum) {
Retour Vrai;
}
retourne false;
}
fonction sumofline (candidat, ligne) {
retour candidat [ligne * 3] + candidat [ligne * 3 + 1] + candidat [ligne * 3 + 2];
}
fonction sumofColumn (candidat, col) {
Retour candidat [col] + candidat [col + 3] + candidat [col + 6];
}
fonction sumofdiagonal (candidat, isforwardslash) {
RETOUR ISFORWARDSLASH? candidat [2] + candidat [4] + candidat [6]: candidat [0] + candidat [4] + candidat [8];
}
Var Permutation = Getpermutation ([1,2,3,4,5,6,7,8,9]);
candidat var;
pour (var i = 0; i <permutation.length; i ++) {
candidat = permutation [i];
if (validatecanate (candidat)) {
casser;
} autre {
candidat = null;
}
}
if (candidat) {
console.log (candidat);
} autre {
console.log («aucun résultat valide trouvé»);
}
résultat
La copie de code est la suivante:
[2, 7, 6, 9, 5, 1, 4, 3, 8]
Le représenter comme un carré magique est:
La copie de code est la suivante:
2 7 6
9 5 1
4 3 8
analyser
En utilisant cette stratégie, vous pouvez théoriquement obtenir les solutions de n'importe quel carré magique d'ordre N, mais en fait, vous ne pouvez obtenir que la solution spécifique du carré magique du troisième ordre, car lorsque N> 3, le fonctionnement qui prend du temps d'obtention de tous les schémas de remplissage deviendra extrêmement énorme.