An interesting puzzle for beginners from CS50 (Harvard).
Task: draw a pyramid from the Mario (mario-less.c) game using # symbols (lattice or hash). The user is asked: “How many blocks to make a pyramid from?”, he enters a number and the pyramid is drawn, right-aligned, like this:
#
##
###
####
#####
######
#######
igroglaz solution:
#include <stdio.h>
int main(void)
{
int height = 0;
int newline;
int hash;
int dot;
printf("Enter height of pyramid. ");
do
{
printf("It must be a positive integer:\n");
scanf("%d", &height);
while (getchar() != '\n') ; // clear buffer (in case of 'a')
}
while (height <= 0);
for (newline = 1; newline <= height; newline++)
{
for (dot = 0; height - newline > dot; dot++)
printf(" ");
for (hash = 1; hash <= newline; hash++)
printf("#");
printf("\n");
}
getchar();
getchar();
return 0;
}
Hello everyone, this is another solution (Stukensia):
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Type number from 1 to 8\n");
}
while (n < 1 || n > 8);
printf("Your number is:%i\n",n);
int i;
int r;
int p;
for (i=0; i<n; i++)
{
for (p=0; p<=(n-i); p++)
{
printf(" ");
}
for (r=0; r<=i; r++)
{
printf("#");
}
printf("\n");
}
}
This is what the program looks like:
The second, more difficult (in the opinion of the creators of CS50) option is to make the pyramid mirror (mario-more.c):
# #
## ##
### ###
#### ####
##### #####
###### ######
####### #######
######## ########
It is already much easier to make it: by rearranging the order of the code from the first pyramid:
#include <stdio.h>
int main(void)
{
int height = 0;
int newline;
int hash;
int dot;
printf("Enter height of pyramid. ");
do
{
printf("It must be a positive integer:\n");
scanf("%d", &height);
while (getchar() != '\n') ; // clear buffer (in case of 'a')
}
while (height <= 0);
for (newline = 1; newline <= height; newline++)
{
for (dot = 0; height - newline > dot; dot++)
printf(" ");
for (hash = 1; hash <= newline; hash++)
printf("#");
printf(" ");
for (hash = 1; hash <= newline; hash++)
printf("#");
printf("\n");
}
getchar();
getchar();
return 0;
}
Another solution to the second more difficult task “mirror pyramid” (Shtukentsia):
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Type number from 1 to 8\n");
}
while (n < 1 || n > 8);
printf("Your number is: %i\n",n);
int i;
int r;
int p;
for (i=0; i<n; i++)
{
for (p=0; p<=(n-i); p++)
{
printf(" ");
}
for (r=0; r<=i; r++)
{
printf("#");
}
printf(" ");
for (r=0; r<=i; r++)
{
printf("#");
}
printf("\n");
}
}
This is what the program looks like:
After checking bugs I updated my code of simple pyramid:
#include <cs50.h>
#include <stdio.h>
// Draw pyramid with hashtags
int main(void)
{
int n; // how big is pyramid
do
{
n = get_int("Type number from 1 to 8\n"); // get number of # from 1 to 8
}
while (n < 1 || n > 8);
// Drawing pyramid
int i;
int r;
int p;
for (i = 0; i < n; i++)
{
for (p = 1; p < (n - i); p++)
{
printf(" ");
}
for (r = 0; r <= i; r++)
{
printf("#");
}
printf("\n");
}
}
And my new code of double pyramid:
#include <cs50.h>
#include <stdio.h>
// Draw double pyramid with hashtags
int main(void)
{
int n;
do
{
n = get_int("Type number from 1 to 8\n"); // Ask user to type the size 1-8
}
while (n < 1 || n > 8);
// Start to draw the pyramid
int i;
int r;
int p;
for (i = 0; i < n; i++)
{
for (p = 1; p < (n - i); p++)
{
printf(" ");
}
for (r = 0; r <= i; r++)
{
printf("#");
}
printf(" "); // prints the middle of pyramid
for (r = 0; r <= i; r++)
{
printf("#");
}
printf("\n");
}
}


