3×3 九宮格填入 1~9 不重複數字,要求每行、每列、兩條對角線和相等(標準魔方陣和為 15)。不允許 9 層巢狀迴圈暴力搜尋。
function isMagicSquare(arr[3][3]):
target = arr[0][0] + arr[0][1] + arr[0][2] // 第一行和作為基準
// 檢查行
for i = 1 to 2:
sum = 0
for j = 0 to 2: sum += arr[i][j]
if sum != target: return false
// 檢查列
for j = 0 to 2:
sum = 0
for i = 0 to 2: sum += arr[i][j]
if sum != target: return false
// 主對角線
sum = 0
for i = 0 to 2: sum += arr[i][i]
if sum != target: return false
// 副對角線
sum = 0
for i = 0 to 2: sum += arr[i][2-i]
if sum != target: return false
return true
function isMagicSquare(array $arr): bool {
$target = array_sum($arr[0]);
// 行
for ($i = 1; $i < 3; $i++) {
if (array_sum($arr[$i]) !== $target) return false;
}
// 列
for ($j = 0; $j < 3; $j++) {
$sum = $arr[0][$j] + $arr[1][$j] + $arr[2][$j];
if ($sum !== $target) return false;
}
// 對角線
if (($arr[0][0] + $arr[1][1] + $arr[2][2]) !== $target) return false;
if (($arr[0][2] + $arr[1][1] + $arr[2][0]) !== $target) return false;
return true;
}
若需生成而非驗證,3×3 魔方陣本質唯一(旋轉/鏡像除外),可直接硬編碼或用 Siamese 方法:
$magic = [
[8, 1, 6],
[3, 5, 7],
[4, 9, 2]
];
九宮格魔方陣驗證只需雙層迴圈檢查 8 條線(3 行 + 3 列 + 2 對角線),時間複雜度 O(1),完全滿足「無 9 層迴圈」要求。