Любопытная задачка для новичков из CS50 (Гарвард).
Задача: нарисовать пирамидку из игры Марио (mario-less.c) при помощи символов # (решетка или хэш). Пользователя спрашивают: «Из скольких блоков сделать пирамиду?», он вводит число и пирамидка рисуется, с выравниванием по правому краю, вот так:
#
##
###
####
#####
######
#######
Решение Игроглаза:
#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;
}
Всем привет, это еще одно решение (Штукенция):
#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");
}
}
Так выглядит запуск программы:
Второй, более сложный (на взгляд создателей CS50) вариант — сделать пирамиду зеркальной (mario-more.c):
# #
## ##
### ###
#### ####
##### #####
###### ######
####### #######
######## ########
Его уже сделать сильно проще: перестановкой порядка кода из первой пирамиды:
#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;
}
Еще одно решение второго более сложного задания «зеркальная пирамидка» (Штукенция):
#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");
}
}
Так выглядит запуск программы:
После проверки багов я обновила свой код простой пирамидки:
#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");
}
}
И обновленный код двойной пирамидки:
#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");
}
}



Thank you so much bro! Спасибо большое админу!