ปริศนา
Magic Square ระดับที่สาม พยายามเติมเต็มจำนวนเต็ม 9 ตัวที่แตกต่างกัน 1 ~ 9 ลงในตาราง 3 × 3 เพื่อให้ผลรวมของตัวเลขในแต่ละแถวแต่ละคอลัมน์และแต่ละเส้นทแยงมุมจะเหมือนกัน
กลยุทธ์
การค้นหาที่เหนื่อยล้า แสดงรายการแผนการเติมจำนวนเต็มทั้งหมดและตัวกรอง
โซลูชัน JavaScript
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Chao เมื่อวันที่ 12/28/14
-
ฟังก์ชั่น getPermutation (arr) {
if (arr.length == 1) {
กลับ [arr];
-
การเปลี่ยนแปลง var = [];
สำหรับ (var i = 0; i <arr.length; i ++) {
var firstele = arr [i];
var arrclone = arr.slice (0);
arrclone.splice (i, 1);
var childpermutation = getpermutation (arrclone);
สำหรับ (var j = 0; j <childpermutation.length; j ++) {
เด็ก [j] .unshift (Firstele);
-
การเปลี่ยนแปลง = การเปลี่ยนแปลง. concat (เด็ก);
-
การเปลี่ยนแปลงกลับ;
-
ฟังก์ชั่น validateCandidate (ผู้สมัคร) {
var sum = ผู้สมัคร [0] + ผู้สมัคร [1] + ผู้สมัคร [2];
สำหรับ (var i = 0; i <3; i ++) {
if (! (sumofline (ผู้สมัคร, i) == sum && sumofcolumn (ผู้สมัคร, i) == sum)) {
กลับเท็จ;
-
-
if (sumofdiagonal (ผู้สมัคร, true) == sum && sumofdiagonal (ผู้สมัคร, เท็จ) == sum) {
กลับมาจริง;
-
กลับเท็จ;
-
ฟังก์ชั่น sumofline (ผู้สมัคร, บรรทัด) {
ส่งคืนผู้สมัคร [บรรทัด*3] + ผู้สมัคร [บรรทัด*3 + 1] + ผู้สมัคร [บรรทัด*3 + 2];
-
ฟังก์ชั่น sumofcolumn (ผู้สมัคร, col) {
ส่งคืนผู้สมัคร [col] + ผู้สมัคร [col + 3] + ผู้สมัคร [col + 6];
-
ฟังก์ชั่น sumofdiagonal (ผู้สมัคร, isforwardslash) {
return isforwardslash? ผู้สมัคร [2]+ผู้สมัคร [4]+ผู้สมัคร [6]: ผู้สมัคร [0]+ผู้สมัคร [4]+ผู้สมัคร [8];
-
การเปลี่ยนแปลง var = getPermutation ([1,2,3,4,5,6,7,7,8,9]);
ผู้สมัคร VAR;
สำหรับ (var i = 0; i <permantation.length; i ++) {
ผู้สมัคร = การเปลี่ยนแปลง [i];
if (validateCandidate (ผู้สมัคร)) {
หยุดพัก;
} อื่น {
ผู้สมัคร = null;
-
-
ถ้า (ผู้สมัคร) {
console.log (ผู้สมัคร);
} อื่น {
console.log ('ไม่พบผลลัพธ์ที่ถูกต้อง');
-
ผลลัพธ์
การคัดลอกรหัสมีดังนี้:
[2, 7, 6, 9, 5, 1, 4, 3, 8]
แสดงให้เห็นว่ามันเป็นสี่เหลี่ยมจัตุรัสคือ:
การคัดลอกรหัสมีดังนี้:
2 7 6
9 5 1
4 3 8
วิเคราะห์
การใช้กลยุทธ์นี้คุณสามารถรับโซลูชันของ N-order Magic Square ได้ในทางทฤษฎี แต่ในความเป็นจริงคุณสามารถรับโซลูชันเฉพาะของ Magic Square ลำดับที่สามได้เท่านั้นเพราะเมื่อ N> 3 การดำเนินการที่ใช้เวลานานในการรับแผนการเติมทั้งหมดจะกลายเป็นขนาดใหญ่มาก