Hackerrank在php中绘制了一个长度为N的楼梯

时间:2015-08-26 16:06:35

标签: php pattern-matching

像这样画一个高度为N的楼梯:

     #
    ##
   ###
  ####
 #####
######

高度为6的楼梯,注意最后一行应该有零空格。

我的解决方案无法正常使用

function draw($size)
{
    for ($i = 1; $i <=$size ; $i++)
    {
        $spaces = $size-$i;
        while ($spaces)
        {
            echo " ";
            $spaces--;
        }
        $stairs = 0;
        while ($stairs < $i)
        {
            echo "#";
            $stairs++;
        }
        echo "<br/>";
    }
}
draw(6);
//output
#
##
###
####
#####
######

没有打印空格,我试过\n, PHP.EOL但它仍无效。有什么建议吗?

13 个答案:

答案 0 :(得分:3)

虽然其他解决方案都很好,但这也是我的代码。

$max=5;
for ( $i =1 ; $i<=$max;$i++) {
        for ( $space = 1; $space <= ($max-$i);$space++) {
                echo " ";
        }
        for ( $hash = 1; $hash <= $i;$hash ++ ) {
                echo "#";
        }
        echo "\n";
}

答案 1 :(得分:2)

//PHP

$n = 6;  // Number of rows.
for($i=1;$i<=$n;$i++){
    echo str_repeat(' ', $n-$i) . str_repeat('#', $i);
    echo '\n';
}

答案 2 :(得分:1)

for(var i = 0; i < n; i++)
{
    var s = "";
    for(var j = 0; j < n; j++)
    {
        if(n - i - 2 < j)
        {
            s += "#";
        }
        else
        {
            s += " ";
        }
    }
    console.log(s);
}

答案 3 :(得分:0)

这是另一个解决方案:

$int = 7;

for($i = 1; $i<=$int; $i++){ 
    printf('%1$s%2$s%3$s',str_repeat(" ",$int-$i),str_repeat("#",$i),"\n");
}

来自官方PHP文档:

str_repeat

答案 4 :(得分:0)

$n = 6;
for ($i = 0; $i < $n; $i++) {
$pad = 1;
for ($space = 0; $space < $n-$i-1; $space++) {
    $pad++;
}
echo str_pad('#', $pad,' ',STR_PAD_LEFT);
for ($j = 0; $j < $i; $j++) {
    echo '#';
}
echo '<br>';
}

答案 5 :(得分:0)

我花了一段时间,但最后我设法按照OFC(A. Sharma)的例子来做。

<?php

$handle = fopen("php://stdin","r");

$n = intval(fgets($handle));


for ($rows = 0; $rows < $n; $rows++) {

    for ($columns = 0; $columns < $n - $rows - 1; $columns++) {

        echo " ";
    }

    for ($columns = 0; $columns < $rows + 1; $columns++) {

        echo "#";
    }

echo "\n";

}

?>

答案 6 :(得分:0)

使用PHP函数range()str_repeat()作为一种优雅的解决方案:

function staircase($n){
    foreach (range(1, $n) as $i) 
        print( str_repeat(' ',$n-$i).str_repeat('#',$i)."\n");
}

demo

答案 7 :(得分:0)

for ($i=0; $i<$n; $i++){
    for ($j=0; $j<$n; $j++){          
        if($i+$j>$n-2){
            echo "#";
        } else {
           echo " ";
        }
        if($j==$n-1 && $i+$j<$n*2-2){ //The second part is to dont break the last line
            echo "\n";
        } 
    }  
}

答案 8 :(得分:0)

  1. 检查n是否在0到101之间(0
  2. 遍历每一行 2.1根据最后一项的位置打印空间 2.2打印项目
  3. 单独的行

以下代码说明了所有内容...

function staircase($n) {
    // check if n is between 0 and 101 (0 < n <=100)
    if( 0 < $n && $n > 100 ) {

    } else {
        // Loop through each row
        for($i = 1; $i <= $n; $i++) {
            // print spaces according to the last item position
            $si = 1;
            while( $si <= ($n - $i)){
                print(" ");
                $si++;
            }
            // print the items
            for($j = 1; $j <= $i; $j++) {
                print("#");
            }
            // separate rows
            print("\n");
        }
    }
}

输出:对于n = 6

     #
    ##
   ###
  ####
 #####
######

答案 9 :(得分:0)

在玩完代码并尝试/失败几次之后,我终于理解正确了。请注意如何使用“ \ n ”来打印空格和换行符。以前的空格“
”和“ ”不起作用。

断行将循环出每一行号。因此,如果我们有$ n = 4,则在中断线之后每隔4个空格就会回显一次。

我制作了2个循环来填充楼梯中的所有字段。 这里最棘手的部分是使它们正确对齐。这是if语句到位的地方。

参考链接: Hackerrank Challenge

// Complete the staircase function below.
function staircase($n) {

   for($i=1; $i<=$n; $i++){
    
    for($j=1; $j <= $n; $j++){
        if( ($n - $i) < $j ){
            echo "#";
        }else{
            echo " ";
            
        }
     }
     echo "\n";
    }
  }

答案 10 :(得分:0)

尝试一下

$n=6;
for($i=1;$i<=$n;$i++){
    
    for($spaces=1;$spaces<=($n-$i);$spaces++){
        echo " ";
    }
    for($staires=0;$staires<$i;$staires++){
        echo "#";
    }        
   echo "\n";
}

答案 11 :(得分:-1)

如果您想转到下一行print(' ')

,请使用print(' ')."\n"

答案 12 :(得分:-1)

JavaScript的:

解决方案:

function StairCase(n){
  let x = [];
  for(let i = 0; i<n; i++){
    while(x.length < n){
        x.push(" ");
    }
    x.shift();
    x.push("#");
    console.log(x.join(''));
}   }         //StairCase(6)