php for循环打印空心菱形的函数,要求总行数==$rows 附解答
//$rows为需要的总行数;$i输出换行;$d输出空格(视字符数情况输出一个||两个);$j输出*case"diamond"://上部for($i=1;$i<=roun...
//$rows为需要的总行数;$i输出换行;$d输出空格(视字符数情况输出一个||两个);$j输出 *
case"diamond": //上部
for($i=1;$i<=round($rows/2);$i++){ //上部需要$rows/2的四舍五入值
for($d=1;$d<=$rows-$i;$d++){
echo'  ';}
for($j=1;$j<=$i*2-1;$j++){
if($j==1||$j==$i*2-1){
echo'*';}else{echo'  ';}
}
echo'<br/>';
}
//下部
for($i=round(($rows-1)/2);$i>=0;$i--){ //下部需要($rows-1)/2的四舍五入值
for($d=1;$d<=$rows-$i;$d++){
echo'  ';}
for($j=1;$j<=$i*2-1;$j++){
if($j==1||$j==$i*2-1){
echo'*';}else{echo'  ';}
}
echo'<br/>';}
break;
网上解析很多,问题是行数变量值与最终行数不相符,因为正三角与倒三角分别为行数和行数减一,以上进行了优化,使得$rows值与总行数一致。(或也可加一个if 奇偶数的判定,稍显冗余。) 展开
case"diamond": //上部
for($i=1;$i<=round($rows/2);$i++){ //上部需要$rows/2的四舍五入值
for($d=1;$d<=$rows-$i;$d++){
echo'  ';}
for($j=1;$j<=$i*2-1;$j++){
if($j==1||$j==$i*2-1){
echo'*';}else{echo'  ';}
}
echo'<br/>';
}
//下部
for($i=round(($rows-1)/2);$i>=0;$i--){ //下部需要($rows-1)/2的四舍五入值
for($d=1;$d<=$rows-$i;$d++){
echo'  ';}
for($j=1;$j<=$i*2-1;$j++){
if($j==1||$j==$i*2-1){
echo'*';}else{echo'  ';}
}
echo'<br/>';}
break;
网上解析很多,问题是行数变量值与最终行数不相符,因为正三角与倒三角分别为行数和行数减一,以上进行了优化,使得$rows值与总行数一致。(或也可加一个if 奇偶数的判定,稍显冗余。) 展开
1个回答
2015-08-21
展开全部
是的,因为对称性,中间只有一个最宽的,所以需要上面或者下面加一个判断,扔掉最长的一行:
<?php
$n=4;
for($i=1;$i<=$n;$i++){
//打印空格
for($j=1;$j<=$n-$i;$j++){
echo " ";
}
//打印*号
for($k=1;$k<=2*$i-1;$k++){
//打印第一行后最后一行都打*连接($i==1 || $i==5)
if($i==1){ //去掉$i==5 把中间抛空
echo "*";
}else{
//怎么打空格和*号的问题
if($k==1 || $k==2*$i-1){
echo "*";
}else{
echo " ";
}
}
}
echo "<br/>";
}
//倒转 抛空
for($i=$n;$i>=0;$i--){
//打印空格
for($j=0;$j<=$n-$i;$j++){
echo " ";
}
//打印*号
for($k=1;$k<=2*$i-3;$k++){
//怎么打空格和*号的问题
if($k==2*$i-3 || $k==1){
echo "*";
}else{
echo " ";
}
}
echo "<br/>";
}
?>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询