Задача
Вася хочет напечатать на принтере пирамиду из какого-то символа высоты $h$. Напишите программу, которая поможет ему в этом, не забывая, что программа должна быть «экономически выгодной», т.е печатать наименьшее количество символов.
Примеры пирамид приведены в примерах входных и выходных данных. Для большей наглядности печатаемые пробелы заменены на точки.
Входные данные
В одной строке задан сначала символ, при помощи которого должна быть напечатана пирамида, а затем через пробел натуральное число, задающее высоту пирамиды $h (h ≤ 50)$.
Выходные данные
В первой сроке выведите общее количество напечатанных «печатных» символов а ниже саму пирамиду.
Тесты
Входные данные | Выходные данные |
---|---|
A 3 | 12 A AAA AAAAA |
M 9 | 117 M MMM MMMMM MMMMMMM MMMMMMMMM MMMMMMMMMMM MMMMMMMMMMMMM MMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMM |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <string> using namespace std; int main() { string s; char a; cin >> a; float b; s = a; cin >> b; cout << ((2 + 3 * (b - 1)) * b)/2 << endl; for(int i; i < b; i++) { for(int j=1; j < b-i; j++) cout << " "; cout << s; s = a + s + a; cout<<endl; } return 0; } |
Решение
Для решения данной задачи потребуется выводить пробелы для отступов в каждой строке и заданный символ в виде пирамиды. Для этого напишем цикл, который будет перебирать строки. Для нахождения количества символов в пирамиде используем формулу: по арифметической прогрессии, где первый элемент это $1$, а каждый следующий больше предыдущего на $2$. В вывод пишется столько пробелов, сколько нужно для правильного расположения (с каждой следующей строчкой пробелов на $1$ меньше, в первой строке $b$ пробелов).