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 奇偶数的判定,稍显冗余。)
展开
 我来答
匿名用户
2015-08-21
展开全部

是的,因为对称性,中间只有一个最宽的,所以需要上面或者下面加一个判断,扔掉最长的一行:

<?php
$n=4;
for($i=1;$i<=$n;$i++){
//打印空格
for($j=1;$j<=$n-$i;$j++){
echo "&nbsp;";
}
//打印*号
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 "&nbsp;";
}
}
}
echo "<br/>";
}
//倒转 抛空
for($i=$n;$i>=0;$i--){
//打印空格
for($j=0;$j<=$n-$i;$j++){
echo "&nbsp;";
}
//打印*号
for($k=1;$k<=2*$i-3;$k++){
//怎么打空格和*号的问题
if($k==2*$i-3 || $k==1){
echo "*";
}else{
echo "&nbsp;"; 
}
}
echo "<br/>";
}
?>
更多追问追答
追问
没听懂你在说什么,上头代码也不对,你别误导别人
追答

不好意思,百度自动过滤了br标签:

显示效果:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式