# 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:

`11:          *                   ***                 *****               *******             *********           ***********         *************       ***************     *****************   ******************* *********************`

### 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

• April 24, 2005 - Added solution 2 and 3.
• March 28, 2005 - Added solution 1.
© 2004-20 robson | cc unless stated