Puzzle
Magic Square der dritten Ebene. Versuchen Sie, 9 verschiedene ganze Zahlen, 1 ~ 9, in eine 3 × 3 -Tabelle auszufüllen, so dass die Summe der Zahlen in jeder Zeile, jede Spalte und jede Diagonale gleich ist.
Strategie
Erschöpfte Suche. Listen Sie alle Ganzzahl -Füllsysteme und Filter auf.
JavaScript -Lösung
Die Codekopie lautet wie folgt:
/**
* Erstellt von Chao am 28.12.14.
*/
Funktion getPermutation (arr) {
if (arr.length == 1) {
return [arr];
}
var permutation = [];
für (var i = 0; i <arr.length; i ++) {
var firstele = arr [i];
var arrcrone = arr.lice (0);
ArrClone.SPLICE (i, 1);
var Childpermutation = GetPermutation (ArrClone);
für (var j = 0; j <childpermutation.length; j ++) {
Childpermutation [J] .Unshift (Firstele);
}
Permutation = Permutation.Concat (Childpermutation);
}
Renditepermutation;
}
Funktion validateCandidate (Kandidat) {
var sum = Kandidat [0] + Kandidat [1] + Kandidat [2];
für (var i = 0; i <3; i ++) {
if (! (
false zurückgeben;
}
}
if (sumofdiagonal (Kandidat, true) == sum && sumofdiagonal (Kandidat, false) == sum) {
zurückkehren;
}
false zurückgeben;
}
Funktion Sumofline (Kandidat, Zeile) {
Rückgabekandidat [Zeile*3] + Kandidat [Zeile*3 + 1] + Kandidat [Zeile*3 + 2];
}
Funktion sumofcolumn (Kandidat, col) {
Rückkehrkandidat [col] + Kandidat [COL + 3] + Kandidat [COL + 6];
}
Funktion sumofdiagonal (Kandidat, isforwardsLash) {
Return isforwardsLash? Kandidat [2]+Kandidat [4]+Kandidat [6]: Kandidat [0]+Kandidat [4]+Kandidat [8];
}
var Permutation = GetPermutation ([1,2,3,4,5,6,7,8,9]);
VAR -Kandidat;
für (var i = 0; i <permutation.length; i ++) {
Kandidat = Permutation [i];
if (validateCandidate (Kandidat)) {
brechen;
} anders {
Kandidat = null;
}
}
if (Kandidat) {
console.log (Kandidat);
} anders {
console.log ('kein gültiges Ergebnis gefunden');
}
Ergebnis
Die Codekopie lautet wie folgt:
[2, 7, 6, 9, 5, 1, 4, 3, 8]
Es als magischem Quadrat darzustellen ist:
Die Codekopie lautet wie folgt:
2 7 6
9 5 1
4 3 8
analysieren
Mit dieser Strategie können Sie theoretisch die Lösungen eines Magic Square in n-Ordnung erhalten. Tatsächlich können Sie jedoch nur die spezifische Lösung des Magic Square dritter Ordnung erhalten, denn wenn n> 3, wird der zeitaufwändige Betrieb, alle Füllschemata zu erhalten, extrem groß.