题目:
打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,…
例如:
输入 5
输出
xxxxx
xyyyx
xy0yx
xyyyx
xxxxx
程序(PHP):
function func($rows)
{
$printNum = function($number){
if($number == 0){
echo "X";
} else if($number == 1){
echo "Y";
} else {
echo $number - 2;
}
};
$num = ceil($rows / 2); // 一共有多少层
$tmp = $rows % 2 == 0 ? 0 : 1; // rows奇数时,tmp为1,否则为0
for($i = 0; $i<$rows; $i++){
$a = $i<$num ? $i+1 : ($num - ($i-$num)-$tmp); // 该行应该有多少种字符
// 打印左边 按顺序
for($k = 0; $k < $a; $k++){
$printNum($k);
}
// 打印中间 重复
for($j = $k; $j<$rows-$k; $j++){
$printNum($k-1);
}
// 打印右边 左边倒序
$k --;
if($rows%2 == 1 && $i == $num - 1){
$k --;
}
for(;$j<$rows; $j++, $k--){
$printNum($k);
}
echo "\n";
}
}
func(21);