这非常简单。矩阵的维数if(2 * input)+1和矩阵中的数字是距离中心+1的距离。请参阅下面的python代码。
import math
def distance(x1, y1, x2, y2):
dist = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)
return int(math.sqrt(dist))+1
if __name__=='__main__':
x = int(input())
if(x < 1):
exit()
dimension = (2*x)-1
center = dimension // 2
mat = [[None for i in range(dimension)] for i in range(dimension)]
for i in range(dimension):
for j in range(dimension):
mat[i][j] = distance(center, center, i, j);
print(mat[i][j], end=' ')
print('')
这是基于您的代码的PHP代码:
<?php
$x = 3;
$dimension = (2 * $x) -1 ;
$center = floor($dimension/2);
for($i = 1; $i <= $dimension; $i++)
{
for($j = 1; $j <= $dimension; $j++)
{
$dist = ($center - $i) * ($center - $i) + ($center - $j) * ($center - $j);
$result = floor(sqrt($dist)) + 1;
echo "(" . $i . ", " . $j . ")" . " = " . $result . "</br>";
}
}
?>
它没有给我与输出相同的结果。
我已经有了如何在PHP中做到这一点,但我不知道如何优化代码。有谁知道如何正确地做到这一点?
<?php
$z = 3;
$dimension = (2 * $z) -1 ;
for($i = 1; $i <= $dimension; $i++)
{
for($j = 1; $j <= $dimension; $j++)
{
if(($i == 1|| $j == 1) || ($i == $dimension || $j == $dimension)){
echo $z . " ";
} else if(($i == 2 || $j == 2) || ($i == $dimension - 1 || $j == $dimension - 1)){
echo $z - 1 . " ";
}
else if(($i == 3 || $j == 3) || ($i == $dimension - 2 || $j == $dimension - 2)){
echo $z - 2 . " ";
}
else if(($i == 4 || $j == 4) || ($i == $dimension - 3 || $j == $dimension - 3)){
echo $z - 3 . " ";
}
else{
echo $z - 4 . " ";
}
if($j == $dimension){
echo "</br>";
}
}
}
?>