题目:3X3 的九宫格,每个横竖斜相加都等于15,使用1-9数字。
要求:PHP语言,1-9数字不重复。
解题思路分析:
1:可以知道和为15,所以获取1-9数字任意搭配三三组合,进行条件过滤,得到没有相同数且和为15的等式。
2:因为是九宫格,所以在第一步得到的等式再任意三三组合,进行条件过滤,得到符合1-9数字不重复的九宫格。
3:对九宫格的竖行和斜行进行条件判断,完全符合题意的九宫格进行输出。
<?php // 获取1-9和为15的所有任意组合等式,不能有相同数目 for ($i=1,$s=0; $i < 10; $i++) { for ($j=1; $j < 10; $j++) { for ($m=1; $m < 10; $m++) { if($i+$j+$m == 15 && $i != $j && $i != $m && $j != $m) { $h[$s] = array($i,$j,$m); $s++; } } } } // 任意组合每一行,形成3X3宫格,排除有相同数字的宫格。 for ($i=0,$s=0; $i < count($h); $i++) { for ($j=0; $j < count($h); $j++) { for ($m=0; $m < count($h); $m++) { $a1 = array_intersect($h[$i], $h[$j]); $a2 = array_intersect($h[$i], $h[$m]); $a3 = array_intersect($h[$j], $h[$m]); if (!($a1+$a2+$a3)) { $l[$s][0] = $h[$i]; $l[$s][1] = $h[$j]; $l[$s][2] = $h[$m]; $s++; } } } } // 计算每个宫格竖行、斜行之和,符合条件则输出 for ($i=0; $i < count($l); $i++) { for ($j=0; $j < count($l[$i][0]); $j++) { $sum[$j] = 0; for ($m=0; $m < count($l[$i]); $m++) { $sum[$j] = $sum[$j] + $l[$i][$m][$j]; } } if($sum[0] == $sum[1] and $sum[1] == $sum[2]) { $hs15 = $l[$i]; $ok[1] = $ok[2] = 0; for ($o=0,$k=0; $o < count($hs15); $o++,$k++) { $ok[1] = $ok[1] + $hs15[$o][$k]; } for ($o=count($hs15)-1,$k=0; $o >= 0; $o--,$k++) { $ok[2] = $ok[2] + $hs15[$o][$k]; } if ($ok[1] == $ok[2]) { echo '['.$hs15[0][0].'] ['.$hs15[0][1].'] ['.$hs15[0][2].']<br />'; echo '['.$hs15[1][0].'] ['.$hs15[1][1].'] ['.$hs15[1][2].']<br />'; echo '['.$hs15[2][0].'] ['.$hs15[2][1].'] ['.$hs15[2][2].']<br />'; echo '<br/>'; } } } // 代码结束 ?>