An inverted alphabet right-angled triangle starts with the longest prefix and drops one letter from the end on each next row — while every row still begins at A.
Remember
Rule: on row with end i, print A..i (i shrinks)
ABCDE
ABCD
ABC
AB
A ← 5 rows (top = 'E')
This is Program 1 flipped: only the outer loop counts down. Compare also with Program 4 (grows while printing backward) and Program 6 (shifts the start letter).
Approach
How to Solve It
Two ways to emit the same shape — classic nested char loops, or spaced letters for readability.
Method
Idea
Best for
Nested char loops
Outer i-- from top; inner prints A..i
Learning, interviews, exams
Spaced letters
Same bounds; print j << " "
Clearer console demos once loops click
Pseudocode
Pseudocode
top = 'A' + rows - 1
for i from top down to 'A':
for j from 'A' to i:
print j (no newline)
print newline
Print letters without a newline, then end the row once.
Try it
Live Preview
Change the row count and the inverted triangle updates instantly — including the triangular letter total.
Whole numbers from 1 to 10. Tap a chip or type a value — the preview redraws as you go.
Live result5 rows · top E · 15 letters
ABCDE
ABCD
ABC
AB
A
Trace
Worked Walkthrough — Top = E (5 rows)
Trace each end letter i and the forward prefix from A.
i (end)
Inner range
Printed row
Letters
E
A..E
ABCDE
5
D
A..D
ABCD
4
C
A..C
ABC
3
B
A..B
AB
2
A
A..A
A
1
Total letter prints: 5 + 4 + 3 + 2 + 1 = 15 = 5×6/2. The left edge is always A; that triangular sum is why time is O(n²).
Code
C++ Programs
Three complete programs: fixed A–E, row-count input, and a spaced-letter variant. Use View Output to reveal sample results.
Example 1 — Fixed Top E
Hard-coded height — outer loop shrinks the end letter; inner loop always prints from A.
C++
#include <iostream>
using namespace std;
int main()
{
for (char i = 'E'; i >= 'A'; i--)
{
for (char j = 'A'; j <= i; j++)
cout << j;
cout << "\n";
}
return 0;
}
Output
ABCDE
ABCD
ABC
AB
A
How It Works
1. Outer loop shrinks the width.i runs from 'E' down to 'A' — first row longest, last row a single letter.
2. Inner loop always starts at A. For each i, j runs from 'A' to i, so every row begins with A.
3. Break the line.cout << "\n" after the inner loop starts the next (shorter) row.
When i = 'C' you get ABC; when i = 'A' you get A.
Example 2 — Row Count Input
Read the number of rows and compute top = 'A' + rows - 1. Prefer validating cin in real apps.
C++
#include <iostream>
using namespace std;
int main()
{
int rows;
cout << "Enter the number of rows: ";
cin >> rows;
char top = char('A' + rows - 1);
for (char i = top; i >= 'A'; i--)
{
for (char j = 'A'; j <= i; j++)
cout << j;
cout << "\n";
}
return 0;
}
Output (when user enters 4)
Enter the number of rows: 4
ABCD
ABC
AB
A
How It Works
1. Scale with rows. For 4 rows, top becomes 'D'. Cap rows at 26 so top stays within A–Z.
2. Same nested-loop core. Only the source of top changes — the print logic matches Example 1.
3. Safer input tip. Prefer:
Safer input
if (!(cin >> rows) || rows < 1 || rows > 26)
{
cout << "Enter a whole number from 1 to 26.\n";
return 1;
}
Example 3 — Spaced Letters
Same bounds — print a trailing space after each letter so columns are easier to scan.
C++
#include <iostream>
using namespace std;
int main()
{
char top = 'E';
for (char i = top; i >= 'A'; i--)
{
for (char j = 'A'; j <= i; j++)
cout << j << " ";
cout << "\n";
}
return 0;
}
Output
A B C D E
A B C D
A B C
A B
A
How It Works
1. Bounds unchanged. Outer still shrinks i; inner still walks A..i.
2. Only the printed unit changes. Each cell becomes j + " ". Trim trailing spaces later if you need a compact line.
Edge Cases & Pitfalls
Check these before calling the solution done.
i++
Growing triangle
If the outer loop goes from 'A' up to top, you get Program 1 (A, AB, ABC…). Use i-- from top for the inverted shape.
\n early
Column of letters
If cout << "\n" is inside the inner loop, each letter lands on its own line. Print letters without a newline; end the row only after the inner loop.
j from i
Wrong cousin pattern
Starting the inner loop at i instead of 'A' produces a different pattern (like Program 6). Always restart at 'A'.
rows = 1
Single A
Output is just A on one line — a good sanity check.
rows > 26
Beyond Z
Cap or reject — top leaves the alphabet. Keep rows in 1…26 for A–Z demos.
Bad cin
Validate rows
Check cin >> rows, require a positive whole number, and clamp to 26 before building top.
Analysis
Time and Space Complexity
Program
Time
Extra space
Nested loops (Examples 1–2)
O(n²)
O(1)
Spaced letters (Example 3)
O(n²)
O(1)
Total letters printed = n + (n−1) + … + 1 = n(n+1)/2, which is still quadratic in n.
Remember
Key Takeaways
Rule: first row longest; each next row drops one letter from the end.
Two loops: outer i-- from top; inner always prints A..i.
Break the row:cout << "\n" only after the inner loop.
Complexity:O(n²) time; O(1) extra space.
One line: for each end letter i from top down to A, print A..i, then a newline.
Frequently Asked Questions
The outer loop counts down so the first row prints the most letters and each next row prints one fewer. The inner loop still prints from A up to the current bound.
Because the inner loop always starts at 'A'. That resets the sequence each row, producing ABCDE then ABCD and so on.
Program 1 grows row length (A, AB, ABC). This pattern shrinks it (ABCDE, ABCD, ABC). Only the outer loop direction changes; the inner loop is the same A..i print.
Program 4 grows while printing backward (A, BA, CBA). This pattern shrinks while printing forward from A (ABCDE, ABCD, ABC).
O(n²) for n rows, because total printed characters are n+(n−1)+…+1 = n(n+1)/2.
Yes. Read rows from cin, set top = char('A' + rows - 1), then loop i from top down to 'A' and print j from 'A' up to i.
After cin >> rows, check failure, require n ≥ 1, and cap at 26 so the top letter stays within A–Z.
Yes. Use 'a' as the base: top = char('a' + rows - 1), then loop the same way with j from 'a' up to i.
🤔
Did you know?
This is Program 1 flipped: for 5 rows it prints ABCDE, ABCD, ABC, AB, A. Only the outer loop direction changes — the inner loop still prints forward from 'A'.