A reverse alphabet right-angled triangle prints letters from a top letter down toward A, growing one character longer each row — the descending mirror of Program 1.
Remember
Rule: each row prints top..i (descending); i walks top..A
E
ED
EDC
EDCB
EDCBA ← 5 rows (top = E)
The inner loop always starts at top. Only the ending letter i moves down each row, so every line begins with the same letter and grows toward A.
Approach
How to Solve It
Count the end letter down from the top, then print from the top down to that end on each row.
Method
Idea
Best for
Code countdown
Outer i from top..A; inner j from top..i
Learning, interviews, fixed demos
Row count
top = ord('A') + rows - 1, then same loops
User input for height
Pseudocode
Pseudocode
top = 'A' + rows - 1
for i from top down to 'A':
for j from top down to i:
print j (no newline)
print newline
Cheat sheet
Goal
Pattern
Pick the end letter
for i in range(top, ord('A') - 1, -1):
Print top..i
for j in range(top, i - 1, -1): print(chr(j), end="")
Compute top from rows
top = ord('A') + rows - 1
Spaced letters
print(chr(j) + " ", end="")
End the row
print()
A–Z-safe height
Clamp rows to 1–26
Printing Letters vs Starting a New Line
API
Effect
Use for
print(..., end="")
Stays on the same line
Each letter on the row
print()
Ends the current line
After the inner loop
Print letters without a newline, then end the row once.
Try it
Live Preview
Change the row count and the reverse triangle updates instantly — including top letter and letter totals.
Whole numbers from 1 to 10. Top letter is A + rows - 1; total letters equal n(n+1)/2.
Live result5 rows · top E · 15 letters
E
ED
EDC
EDCB
EDCBA
Trace
Worked Walkthrough — top = 'E'
Trace each end letter i and the descending run printed from E down to i.
i
Inner j
Printed row
Count
E
E..E
E
1
D
E..D
ED
2
C
E..C
EDC
3
B
E..B
EDCB
4
A
E..A
EDCBA
5
Total letters: 1 + 2 + 3 + 4 + 5 = 15 = n(n+1)/2. That triangular sum is why time is O(n²).
Code
Python Programs
Three complete programs: fixed top E, row-count input(), and spaced letters. Use View Output to reveal sample results.
Example 1 — Fixed Top E
Outer loop sets the last letter for each row (E, D, C, B, A). Inner loop prints from 'E' down to that letter.
Python
for i in range(ord('E'), ord('A') - 1, -1):
for j in range(ord('E'), i - 1, -1):
print(chr(j), end="")
print()
Output
E
ED
EDC
EDCB
EDCBA
How It Works
1. Outer loop picks the end.i walks E, D, C, B, A — the last letter printed on that row.
2. Inner loop always starts at top. Print from ord('E') down to i. When i is C, that is EDC.
3. Break the line. Bare print() after the inner loop starts the next longer reverse run.
Example 2 — Row Count Input
Read the number of rows and compute top = ord('A') + rows - 1. Prefer try/except in real apps.
Python
rows = int(input("Enter the number of rows: "))
top = ord('A') + rows - 1
for i in range(top, ord('A') - 1, -1):
for j in range(top, i - 1, -1):
print(chr(j), end="")
print()
Output (when user enters 4)
Enter the number of rows: 4
D
DC
DCB
DCBA
How It Works
1. Map rows → top. For 4 rows, top becomes ord('D').
2. Same nested-loop core. Only the bounds follow top instead of the literal ord('E').
3. Safer input tip. Prefer try/except and stay within A–Z:
Safer input
try:
rows = int(input("Enter the number of rows: "))
except ValueError:
print("Enter a row count from 1 to 26.")
raise SystemExit
if rows < 1 or rows > 26:
print("Enter a row count from 1 to 26.")
raise SystemExit
Example 3 — Spaced Letters
Print a trailing space after each letter so columns are easier to scan.
Python
top = ord('E')
for i in range(top, ord('A') - 1, -1):
for j in range(top, i - 1, -1):
print(chr(j) + " ", end="")
print()
Output
E
E D
E D C
E D C B
E D C B A
How It Works
1. Same bounds. Outer and inner loops match Example 1 — only the printed unit changes.
2. Letter plus space.chr(j) + " " makes columns easier to read at a glance.
3. Compact tip. Trim trailing spaces later if you need a tight line without a final space.
Edge Cases & Pitfalls
Check these before calling the solution done.
Inner starts at A
Wrong order
Starting the inner loop at A and counting up prints the forward triangle (Program 1), not this reverse pattern.
j from i
Missing top letter
Inner must start at top, not i. Starting at i prints a single letter per row.
print() early
Broken row
Call bare print() only after the inner loop. Inside it (or default print(chr(j))), each letter lands on its own line.
rows = 1
Single A
Output is just A — a good sanity check.
Past Z
Clamp to 26
More than 26 rows walks top past Z. Cap or reject the input.
Bad input
ValueError on int()
Bare int(input()) raises on letters — prefer try/except ValueError and require 1–26.
Analysis
Time and Space Complexity
Program
Time
Extra space
Fixed / input / spaced forms
O(n²)
O(1)
Total letters printed = 1 + 2 + … + n = n(n+1)/2, which is quadratic in the number of rows.
Remember
Key Takeaways
Always start at top: inner loop prints top..i, never from A upward.
End letter walks down: outer i from top..A grows each reverse row.
Mirror of Program 1: same triangle shape, descending letter order.
Complexity:O(n²) time; O(1) extra space.
One line: for each end letter counting down, print top..end, then print().
Frequently Asked Questions
The outer loop sets the last letter on each row from E down to A. For each outer code i, the inner loop starts at E and prints down to i, so rows grow longer while letters remain in reverse order.
Because the inner loop always starts at top (E in the fixed example). Only the end letter changes with the outer-loop bound, so the triangle grows by one character each row.
Yes. Read rows with int(input()) and set top = ord('A') + rows - 1. Then loop i from top down to ord('A') and print j from top down to i.
Use Program 1: loop upward from A and print to the current end letter. This page is the descending mirror of that pattern.
print(chr(j), end="") stays on the same line for each letter. print() ends the row after the inner loop finishes.
O(n²) for n rows, because the total printed letters are 1+2+...+n = n(n+1)/2.
Prefer try/except ValueError around int(input()), require n ≥ 1, and cap at 26 so the top letter stays within A–Z.
Yes. Use ord('a') as the base: top = ord('a') + rows - 1, then loop the same way downward.
🤔
Did you know?
This reverse right-angled alphabet triangle prints letters from a top letter down toward A on each row. For 5 rows, the output is E, ED, EDC, EDCB, and EDCBA. In Python, use range(..., -1) with ord/chr to count letter codes downward.