Любопытная задачка для новичков из 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! Спасибо большое админу!