首頁  >  文章  >  後端開發  >  php 列印一個邊長為N的實心和空心菱型

php 列印一個邊長為N的實心和空心菱型

WBOY
WBOY原創
2016-08-08 09:29:201181瀏覽

php 印一個邊長為N的實心和空心菱型

實心菱型計算方法:

$n:邊長

$rows:總行數

上部前面空格數=$n-$i-1
字元數=$i*2+1
下部
前面空格數=$i-$n+1
字元數=($rows-$i)*2-1

使用 str_pad 可以減少for/while等循環

/**
 * 打印实心菱型
 * @param  int    $n 边长,默认5
 * @param  String $s 显示的字符, 默认*
 * @return String
 */
function solidDiamond($n=5, $s='*'){

    $str = '';

    // 计算总行数
    $rows = $n*2-1;

    // 循环计算每行的*
    for($i=0; $i<$rows; $i++){
        if($i<$n){ // 上部
            $str .= str_pad(&#39;&#39;, ($n-$i-1), &#39; &#39;). str_pad(&#39;&#39;, $i*2+1, $s)."\r\n";
        }else{     // 下部
            $str .= str_pad(&#39;&#39;, ($i-$n+1), &#39; &#39;). str_pad(&#39;&#39;, ($rows-$i)*2-1, $s). "\r\n";
        }
    }

    return $str;

}

echo &#39;<xmp>';
echo solidDiamond(5);
echo '</xmp>';
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *


$i:目前行,0開始$rows:總行數上部前面空格數=$n-$i-1
空心的空格數=$i*2+1-2
字元數=$i* 2+1 - 空心的空格數
下部
前面空格數=$i-$n+1
空心的空格數=($rows-$i)*2-1-2
字元數=($rows-$ i)*2-1 - 空心的空格數

/**
 * 打印空心菱型
 * @param  int    $n 边长,默认5
 * @param  String $s 显示的字符, 默认*
 * @return String
 */
function hollowDiamond($n=5, $s='*'){

    $str = '';

    // 计算总行数
    $rows = $n*2-1;

    // 循环计算每行的*
    for($i=0; $i<$rows; $i++){
        if($i<$n){ // 上部
            $tmp = $i*2+1;
            $str .= str_pad(&#39;&#39;, ($n-$i-1), &#39; &#39;). str_pad(str_pad(&#39;&#39;, $tmp-2, &#39; &#39;, STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH)."\r\n";
        }else{     // 下部
            $tmp = ($rows-$i)*2-1;
            $str .= str_pad(&#39;&#39;, ($i-$n+1), &#39; &#39;). str_pad(str_pad(&#39;&#39;, $tmp-2, &#39; &#39;, STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH). "\r\n";
        }
    }

    return $str;

}

echo &#39;<xmp>';
echo hollowDiamond(5);
echo '</xmp>';

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *


以上就介紹了php 列印一個邊長為N的實心和空心菱型,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn