比如输出一个简单的菱形或者叫星星塔,首先是最外层控制行号,然后是内层的循环,内层的循环有两个第一个循环控制,然后第二个循环来控制星星的数量,控制空格的是总共有的行数减去当前的行数for($space=1; $space<=$lines-$line; ++$space) 然后是星星的循环是for($star=1; $star<=2*$line-1; ++$star)
下面的代码是最简单的输出菱形的一部分
//$line 表示行号
//$space = $lines-$line;//每行的前导空格
//$star = 2*$line - 1;//m每行的星星数量
//外层循环控制行号
for($line=1; $line<=$lines; ++$line) {
//先输出前导空格,控制空格的数量
for($space=1; $space<=$lines-$line; ++$space) {
echo '+';
}
//再输出星星,控制星星的数量
for($star=1; $star<=2*$line-1; ++$star) {
echo '*';
}
//输出换行
echo "<br />";
}
涉及到对称的图形就大多涉及到数轴比如输出入读所示的零星 +用空格来代替
首先一般的方法就是先做一个++的循环输出上半层,然后再做一个--的循环输出下半层
比如是这样
$lines=12;
for ($line=1; $line <=$lines ; $line++) {
for ($j=1; $j <= $lines - $line ; $j++) {
echo "+";
}
for ($i=0; $i < 2*$line-1; $i++) {
if ($i == 0 || $i == 2*$line-2) {
echo "*";
}else{
echo "+";
};
}
echo "</br>";
}
$lines=12;
for ($line=$lines-1; $line >=1 ; $line--) {
for ($j=1; $j <= $lines - $line ; $j++) {
echo "+";
}
for ($i=0; $i < 2*$line-1; $i++) {
if ($i == 0 || $i == 2*$line-2 || $line == $lines) {
echo "*";
}else{
echo "+";
};
}
echo "</br>";
}
然后还有就是一种比较巧的方法 利用数轴
//1 2 3 4 54 3 2 1
//-4 -3 -2 -1 01 2 3 4(数轴)
//4 3 21 0 1 2 34(绝对值)
想到达到 1 2 3 4 5 4 3 2 1的效果
先把-4 -3 -2 -1 01 2 3 4用绝对值函数转换一下
然后就是4 3 2 1 01 2 3 4
对应的第一个相加的话就都是等于同一个书 比如说这个 就都等于5
相应的伪代码
for($i=-4; $i<=4; ++$i) {
echo $i, '+';
echo abs($i), '+';
echo 5-abs($i);
echo '<br>';
}
按照这个思路的话,首先最外层的循环控制的是数轴,也就是说从负数到正数的走一遍for($i=-($lines-1); $i<=$lines-1; ++$i)
然后里面的用总的行数减去上面数轴的绝对值$line = $lines - abs($i);
然后下面的额代码不变就行了
for($i=-($lines-1); $i<=$lines-1; ++$i) {
//计算$line
$line = $lines - abs($i);
//先输出前导空格,控制空格的数量
for($space=1; $space<=$lines-$line; ++$space) {
echo '+';
}
//再输出星星,控制星星的数量
for($star=1; $star<=2*$line-1; ++$star) {
//判断应该输出星星还是空格
if($star==1 || $star==2*$line-1) {
echo '*';
} else {
echo '+';
}
}
//输出换行
echo "<br />";
}