Robson » Little Red Book » Star pyramid

Chapter 6 - Question 5

Given a positive non-zero integer not greater than the number of characters rows on your VDU, place one "*" character in the centre column, on the top line. Then, for each succeeding line place two additional "stars" centrally below the previous line, to form a pyramid. E.g. for four lines:

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

Solution 1

<?
   // randomly generate an amount
   // this script can handle any positive number
   $amount = mt_rand(2, 12);
   // align text
   echo '<pre>' . $amount . ':<br/>';
   // loop through the number of lines
   for ($n = 1; $n <= $amount; $n++)
   {
       // the amount of stars is double the amount minus 1
       $stars = str_repeat('*', ($n*2)-1);
       // the amount of spaces is the amount minus the current line
       $spaces = str_repeat(' ', $amount-$n);
       // echo out the line of the pyramid
       echo $spaces . $stars . $spaces . '<br/>';    
   }
   // return to normal format
   echo '</pre>';
 
?>

Which produces:

4:
*
***
*****
*******

Solution 2

A C++ solution. This would be better if I knew what function is used to repeat characters.

#include <stdio.h>
 
int main(int argc, char *argv[])
{
   int iAmount, a, b;
   
   printf("How many rows?\n>");
   scanf("%d", &iAmount);
   
   for (a = 1; a <= iAmount; a++)
   {
       for (b = 0; b < iAmount-a; b++)
           printf(" ");
       for (b = 1; b < a*2; b++)
           printf("*");
       printf("\n");        
   }
   return 1;
}

Solution 3

I've converted the code above into a nifty pyramid that's similar to the output ;)

#include <stdio.h>
int main(int argc, char *argv[])
{
           ;
          int
         r,o,w
        ;scanf(
       "%d",&r);
      for(w=1;w<=
     r;w++){for(o=
    0;o<(r-w);o+=1)
   printf(" ");for(o
  =1;o<w*2;o++)printf
 ("*");printf("\n");};
}

Log

© 2004-17 robson | cc unless stated