A palindromic alphabet pyramid prints each row as letters climbing from A to a peak, then descending back to A — so every full row reads the same forward and backward.
Remember
Rule: print A..peak, then (peak-1)..A (center once)
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA ← 5 rows
Unlike Program 1 (only the left half), the mirror starts at peak - 1 so the middle letter is not doubled. Row length is always odd: 2r - 1.
Approach
How to Solve It
For each row, pick a peak letter, print up to it, then mirror back without reprinting the peak.
Method
Idea
Best for
Up then down
Two loops: A..peak then (peak-1)..A
Learning, interviews, left-aligned demos
Centered
Same letters plus leading spaces
Pyramid layout under the widest row
Pseudocode
Pseudocode
for r from 0 to n - 1:
peak = 'A' + r
for ch from 'A' to peak:
print ch
for ch from peak - 1 down to 'A':
print ch
print newline
for (char i = 'A'; i <= endChar; i++) then up/down
Center the row
for (int s = 0; s < n - r - 1; s++) cout << " ";
End the row
cout << "\n";
A–Z-safe height
Clamp n to 1–26
Printing Letters vs Starting a New Line
API
Effect
Use for
cout << ch / cout << " "
Stays on the same line
Each letter (and optional pad spaces)
cout << "\n"
Ends the current line
After both up and down halves
Print letters without a newline, then end the row once.
Try it
Live Preview
Change the row count and the palindrome pyramid updates instantly — including peak letter and letter totals.
Whole numbers from 1 to 10. Row r (0-based) peaks at A + r; total letters equal n².
Live result5 rows · peak E · 25 letters
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
Trace
Worked Walkthrough — n = 4
Trace each peak, the ascending half, the descending half, and the full palindrome.
Row r
Peak
Up
Down
Printed row
0
A
A
(none)
A
1
B
AB
A
ABA
2
C
ABC
BA
ABCBA
3
D
ABCD
CBA
ABCDCBA
Lengths: 1 + 3 + 5 + 7 = 16 = 4². Starting the down loop at the peak would wrongly print ABCCBA on row 2.
Code
C++ Programs
Three complete programs: fixed A–E, row-count input, and a centered layout. Use View Output to reveal sample results.
Example 1 — Fixed A–E
Print the forward part A..i, then print back from i-1..A.
C++
#include <iostream>
using namespace std;
int main()
{
for (char i = 'A'; i <= 'E'; i++)
{
for (char j = 'A'; j <= i; j++)
{
cout << j;
}
for (char k = i - 1; k >= 'A'; k--)
{
cout << k;
}
cout << "\n";
}
return 0;
}
Output
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
How It Works
1. Outer loop grows the peak.i runs A..E — each value is the center letter for that row.
2. Forward half. Print A through i — the ascending side including the center.
3. Mirror without the peak. Reverse from i - 1 down to A. Starting at i would wrongly print ABCCBA when i = 'C'.
Example 2 — Row Count Input
Compute endChar = 'A' + rows - 1, then reuse the same up/down row. Check cin in real apps.
C++
#include <iostream>
using namespace std;
int main()
{
int rows;
cout << "Enter the number of rows: ";
cin >> rows;
char endChar = (char)('A' + rows - 1);
for (char i = 'A'; i <= endChar; i++)
{
for (char j = 'A'; j <= i; j++)
{
cout << j;
}
for (char k = i - 1; k >= 'A'; k--)
{
cout << k;
}
cout << "\n";
}
return 0;
}
Output (when user enters 4)
Enter the number of rows: 4
A
ABA
ABCBA
ABCDCBA
How It Works
1. Map rows → peak. For rows = 4, endChar is 'D' and peaks walk A..D.
2. Same up/down core. Ascend to the peak, then descend from peak - 1 — identical logic to Example 1.
3. Safer input tip. Prefer checking the stream and staying within A–Z:
Safer input
if (!(cin >> rows) || rows < 1 || rows > 26)
{
cout << "Enter a row count from 1 to 26.\n";
return 1;
}
Example 3 — Centered Palindrome Pyramid
Add leading spaces so shorter rows sit under the widest row (same idea as Program 16).
C++
#include <iostream>
using namespace std;
int main()
{
int n = 5;
for (int r = 0; r < n; r++)
{
char peak = (char)('A' + r);
for (int s = 0; s < n - r - 1; s++)
{
cout << " ";
}
for (char ch = 'A'; ch <= peak; ch++)
{
cout << ch;
}
for (char ch = peak - 1; ch >= 'A'; ch--)
{
cout << ch;
}
cout << "\n";
}
return 0;
}
Output
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
How It Works
1. Pad first. Print n - r - 1 spaces so shorter palindromes sit under the widest row.
2. Same letter logic. Up to peak, then down from peak - 1 — unchanged from Examples 1 and 2.
3. Alignment only. Centering is layout; the palindrome rule does not change.
Edge Cases & Pitfalls
Check these before calling the solution done.
Down from peak
Doubled center
Starting the reverse loop at the peak prints ABCCBA instead of ABCBA. Always start at peak - 1.
Only up
Not a palindrome
Skipping the descending half gives Program 1 style rows (A, AB, ABC…) — not this pattern.
\n early
Broken row
Call cout << "\n" only after both halves. Inside either loop, each letter lands on its own line.
n = 1
Single A
Output is just A; the mirror loop does not run — a good sanity check.
Past Z
Clamp to 26
More than 26 rows walks the peak past Z. Cap or reject the input.
Bad cin
Failed stream
Check cin >> rows (or !cin.fail()) before looping so letters or empty input do not leave rows garbage.
Analysis
Time and Space Complexity
Program
Time
Extra space
Up/down / centered forms
O(n²)
O(1)
Row r (1-based) prints 2r - 1 letters. Over n rows the total is 1 + 3 + … + (2n - 1) = n².
Remember
Key Takeaways
Two halves: climb A..peak, then descend (peak-1)..A.
Center once: never start the reverse loop at the peak itself.
Odd lengths: each row has 2r - 1 letters; totals sum to n².
Complexity:O(n²) time; O(1) extra space.
One line: for each peak, print A..peak then (peak-1)..A so the row is a palindrome.
Frequently Asked Questions
The peak letter was already printed by the first loop. Starting the mirror at peak-1 avoids printing the center letter twice.
Print A..peak, then print (peak-1)..A so the center letter is not duplicated.
Row r prints 2r-1 letters. Over n rows the total is 1+3+...+(2n-1)=n².
Yes. Print each letter followed by a space in both halves, and update the sample output accordingly.
cout << ch stays on the same line for each letter. cout << "\n" ends the row after both halves finish.
Program 1 prints only the left half (A, AB, ABC…). This pattern mirrors back down so each full row is a palindrome.
O(n²) for n rows because each row prints O(n) characters and the sum of odd lengths is n².
After cin >> rows, check the stream, require n ≥ 1, and cap at 26 so peaks stay within A–Z.
🤔
Did you know?
Each row prints A up to the row peak, then prints back down starting from peak - 1 so the middle letter appears only once. Row length is 2r - 1 for row r, so the total characters over n rows is n².