Reverse Repeating-Letter Alphabet Triangle in C++

Beginner
⏱️ 8 min read
📚 Updated: Aug 2026
🎯 3 Code Examples
🚀 Live Preview
Nested Loops

What You’ll Learn

Same repeating idea as Program 9, but letters run E → D → C → B → A while row widths still grow 1, 2, 3, 4, 5. This tutorial covers the shape rule, countdown loops, a live preview, worked C++ examples, edge cases, and complexity.

Shape Rule

Repeat letter, grow width

Row 1 prints E, row 2 prints DD, up to AAAAA on the last line.

Outer Loop

Letter countdown

for (char i = 'E'; i >= 'A'; i--) picks the letter for each row.

Inner Loop

Repeat count

for (char j = 'E'; j >= i; j--) runs 1, 2, 3… times — print i, not j.

cout vs newline

Same line / next line

Letters use cout << i; end each row with cout << "\n".

Live Preview

1–26 rows

Pick a row count and draw the reverse repeating triangle in the browser.

O(n²)

Complexity

Total letters = n(n+1)/2; extra memory stays O(1).

Introduction

A reverse repeating alphabet triangle grows by one repeated letter on each new line, counting letters downward from the top of the alphabet range. With the right angle on the left, the console shows a staircase of identical letters per row.

In C++ you usually solve it with two nested for loops: the outer loop picks the row letter (counting down), the inner loop prints that same letter the right number of times, then cout << "\n" moves to the next line.

Why it matters?

It locks in the difference between “which letter” (outer loop) and “how many times” (inner loop). Once that clicks, forward repeats, pyramids, and letter-countdown variants become much easier.

Key Highlights

Letters Count Down

Rows use E, then D, then C … down to A.

Width Still Grows

Row widths are still 1, 2, 3, … like Program 9.

Print Outer Letter

cout << i in the inner loop; cout << "\n" after.

Mirror of Program 9

Same shape — reverse letter direction only.

In short: for each letter i from top down to A, print i repeatedly (growing count), then call cout << "\n".

📝 Problem & Approach

Given a positive integer rows (or a fixed top letter like 'E'), print a left-aligned triangle where each row repeats one letter and letters count downward.

C++
// First 5 rows (conceptual shape)
// E
// DD
// CCC
// BBBB
// AAAAA

Inputs & Outputs

ItemTypeDescription
rowsintNumber of triangle lines (typically 1–26). Top letter = 'A' + rows - 1.
Printed outputtextLeft-aligned rows; row k repeats letter top - (k-1) exactly k times.

Minimal workflow

Pseudocode
top = 'A' + rows - 1
for ch from top down to 'A':
    repeat = (top - ch) + 1
    for k from 1 to repeat:
        print ch (no newline)
    print newline

Approach comparison

ApproachIdeaBest for
Nested char loopsOuter letter + inner count via char rangeLearning and interviews
string(repeat, ch)Build a whole row in one callShorter production-style demos

⚡ Quick Reference

GoalPattern
Walk letters downwardfor (char i = 'E'; i >= 'A'; i--)
Grow repeat countfor (char j = 'E'; j >= i; j--)
Print row lettercout << i; — not j
End the rowcout << "\n";
One-line row shortcutcout << string(repeat, ch) << "\n";
Forward lettersSee Program 9 (A, BB, CCC, …)

📋 cout vs newline vs string(n, ch)

Same triangle — different ways to emit characters.

cout << i
same line

Prints a letter without moving to the next line

cout << "\n"
new line

Ends the current row after all repeats are printed

string(n, ch)
whole row

Builds n copies of ch at once — skip the inner loop

Learning tip
print i

Master printing the outer letter before the string shortcut

Context

When This Pattern Shows Up

Reach for this triangle when practicing letter direction vs repeat count.

  1. After Program 9

    Flip letter direction while keeping the same growing widths.

  2. Outer vs inner roles

    Clear drill: outer = which letter, inner = how many copies.

  3. Char arithmetic practice

    Compute top = 'A' + rows - 1 and count down safely.

  4. Gateway to variants

    Lowercase, hollow borders, or centered pyramids next.

  5. Not a UI layout tool

    This is a console teaching pattern — not how you build modern app screens.

Key benefit: one small program that separates letter choice from repeat count — the skill behind most alphabet patterns.

🔮 Live Preview

Choose a row count between 1 and 26 and draw the reverse repeating alphabet triangle in the browser.

Try 5 (E…A), 4 (D…A), or 7. Max 26 keeps letters in A–Z.

Live result
Press "Draw pattern".

Examples Gallery

Three complete C++ programs — fixed top letter, console input, and a string(n, ch) shortcut. Click View Output to reveal sample console results.

📚 Getting Started

Print five rows with classic nested char loops.

Example 1 — Fixed 'E' down to 'A'

Hard-coded range — ideal for first demos and screenshots.

C++
#include <iostream>
using namespace std;

int main() {
    char i, j;

    for (i = 'E'; i >= 'A'; i--) {
        for (j = 'E'; j >= i; j--) {
            cout << i;
        }
        cout << "\n";
    }

    return 0;
}

How It Works

When i = 'E', the inner loop runs once and prints E. When i = 'D', it prints DD, and so on until i = 'A'. Printing i (not j) keeps each row uniform.

📈 Practical Variant

Let the user choose the height at runtime.

Example 2 — User Input Version

Compute top = 'A' + rows - 1, then count down. Check cin in real apps.

C++
#include <iostream>
using namespace std;

int main() {
    int rows, repeat, k;
    char top, ch;

    cout << "Enter the number of rows: ";
    cin >> rows;

    top = (char)('A' + rows - 1);
    for (ch = top; ch >= 'A'; ch--) {
        repeat = (top - ch) + 1;
        for (k = 1; k <= repeat; k++) {
            cout << ch;
        }
        cout << "\n";
    }

    return 0;
}

How It Works

For rows = 4, top is 'D'. Each step down increases repeat by one. Clamp rows to 1–26 so top stays within A–Z.

⚡ Shortcut Style

Same shape without an explicit inner print loop.

Example 3 — string(repeat, ch)

Build each repeated-letter row in one call, then print it.

C++
#include <iostream>
#include <string>
using namespace std;

int main() {
    int rows = 5;
    char top = (char)('A' + rows - 1);

    for (char ch = top; ch >= 'A'; ch--) {
        int repeat = (top - ch) + 1;
        cout << string(repeat, ch) << "\n";
    }

    return 0;
}

How It Works

string(repeat, ch) creates a string of length repeat filled with ch. Great once you understand the nested-loop idea; keep the two-loop version for exams that ask you to show both bounds.

🧠 How the Algorithm Prints Rows

1

Set up

#include <iostream> brings in cout / cin. Fix the top letter or compute it from rows.

Setup
2

Outer loop (letter)

for (char i = 'E'; i >= 'A'; i--) selects the character printed on the row.

E → A
3

Inner loop (count)

for (char j = 'E'; j >= i; j--) runs 1, 2, 3… times; print i with cout << i.

Repeats
4

New line

cout << "\n" ends the row so the next outer iteration starts fresh.

Break
=

Triangle complete

Total letters: 1+2+…+n = n(n+1)/2O(n²) time, O(1) extra memory.

🔎 Worked Walkthrough — 'E' down to 'A'

Trace each outer-loop value of i and count how many times the inner loop runs.

iInner j rangePrinted rowRepeats
'E''E'..'E'E1
'D''E'..'D'DD2
'C''E'..'C'CCC3
'B''E'..'B'BBBB4
'A''E'..'A'AAAAA5

Total letter prints: 1 + 2 + 3 + 4 + 5 = 15 = 5×6/2.

Use Cases

Where this tiny pattern (and its loop structure) shows up beyond the homework prompt.

1. Outer vs Inner Clarity

Best demo that the printed value need not be the loop counter.

Example: swap printing i for printing j and watch letters step.

2. Pair with Program 9

Teach direction as a one-line change: increment vs decrement.

Example: side-by-side A/BB/CCC vs E/DD/CCC.

3. Char Math Labs

Practice 'A' + rows - 1 without complex algorithms.

Example: rows = 7 → top = 'G'.

4. Case & Fill Variants

Swap to lowercase or mix digits once the loops work.

Example: start from 'a' + rows - 1.

5. Complexity Intuition

Triangular totals make O(n²) concrete for beginners.

Example: count printed letters for n = 10 → 55.

6. Input Validation Labs

Pair the pattern with cin checks and 1–26 clamps.

Example: reject rows <= 0 or rows > 26.

Pro Tip: when explaining this pattern, say “outer picks the letter, inner only counts” before writing any code — that story prevents the print-j mistake.

Advantages

Why this pattern earns a spot right after the forward repeating triangle.

  1. 1. Instant Visual Feedback

    Wrong printed variable shows up immediately as stepping letters.

  2. 2. Minimal Concepts

    Only loops, chars, and console output — no arrays required.

  3. 3. Easy to Mirror

    Flip to Program 9 by counting letters upward instead.

  4. 4. O(1) Extra Memory

    Streaming output needs no storage beyond loop counters.

Pro Tip: learn the nested-loop version first; treat string(repeat, ch) as a polish shortcut afterward.

Usage Tips

Small habits that keep alphabet-pattern code clean.

  1. 1. Name the Roles

    Use ch for the row letter and repeat (or k) for the count — clearer than overloaded i/j.

  2. 2. Prefer cin validation

    Avoid bad input when the user types letters instead of a number.

  3. 3. Keep the newline outside

    Only call cout << "\n" after the inner loop finishes the row.

  4. 4. Clamp to 26

    For A–Z demos, reject or clamp rows > 26.

  5. 5. Dry-Run One Small n

    Trace rows = 3 (C, BB, AAA) on paper before coding larger demos.

Pro Tip: if a row shows EDCBA-style sequences, you almost certainly printed j instead of i.

Common Pitfalls

Mistakes that commonly break reverse repeating alphabet patterns.

  1. 1. Printing j Instead of i

    Rows become countdown sequences instead of repeated letters.

    → Always cout << i (or ch) for this shape.

  2. 2. Newline Inside the Inner Loop

    Each letter lands on its own line — you get a column, not a triangle.

    → Use cout << i for letters; cout << "\n" only after the inner loop.

  3. 3. Forgetting the Row Break

    Omitting cout << "\n" glues every letter onto one endless line.

    → Always end the row after the inner loop.

  4. 4. Unchecked cin

    Letters or empty input leave rows unset.

    → Check cin.fail() and re-prompt on failure.

  5. 5. rows > 26 Without a Policy

    'A' + rows - 1 can leave the A–Z range.

    → Clamp to 26 or define wrap/error behavior explicitly.

Edge Cases

Check these inputs before calling the solution done.

rows = 1

Single letter

Output is just A on one line.

rows = 0

Empty pattern

Treat as invalid; re-prompt instead of silent empty output.

Negative

rows < 0

Invalid height — validate before computing top.

rows > 26

Past Z

Clamp or error — char math leaves A–Z.

Bad input

Non-numeric input

Check cin.fail() or if (!(cin >> rows)).

Case

Lowercase variant

Same loops work with 'a' and 'a' + rows - 1.

🎯 Practice Problems

Try these variations to lock in the pattern.

1. Flip to Program 9

  • Count letters upward: A, BB, CCC, …
  • Continue with Program 9

2. Lowercase version

  • Use 'a' + rows - 1 as the top letter
  • Shows the loop structure is reusable

3. Safe input loop

  • Check cin.fail() until 1 <= rows <= 26
  • Then draw the triangle

4. Hollow reverse triangle

  • Print the letter only on borders; spaces inside
  • Harder follow-up after this page

Notes

  • Triangular count. Total letters for n rows is n(n+1)/2 — hence O(n²) time.
  • Print the outer letter; the inner loop only decides how many times.
  • Validate 1 <= rows <= 26 for interactive A–Z programs.
  • This page is left-aligned. Centered pyramids need leading spaces — covered later in the series.

Quick Takeaway: outer loop picks the letter (counting down), inner loop repeats it, then break the line — that is the whole pattern.

⏱️ Time and Space Complexity

ProgramTimeExtra space
Nested loops (Examples 1–2)O(rows²)O(1)
string(repeat, ch) (Example 3)O(rows²)O(rows) per row string (temporary)
Wrap Up

🎉 Conclusion

The reverse repeating alphabet triangle is a small nested-loop exercise with lasting payoff: outer letter vs inner count, char countdown, and O(n²) intuition. Master the classic two-loop version, then optionally shorten rows with string(repeat, ch).

Practice the three examples above, then compare with Program 9 or continue to the next alphabet pattern.

Print the outer letter with cout, end rows with cout << "\n", and clamp row counts to 1–26 when reading input.

💡 Best Practices

✅ Do

  • Explain outer = letter, inner = count before coding
  • Use cout << i for letters and cout << "\n" after each row
  • Validate 1 <= rows <= 26 for interactive programs
  • Check cin.fail() over bare cin
  • State O(n²) time when asked about complexity

❌ Don’t

  • Print the inner-loop variable for this repeating shape
  • Call cout << "\n" inside the inner letter loop
  • Skip the newline after each row
  • Ignore bad console input in user-facing demos
  • Allow rows > 26 without a clear policy

Key Takeaways

Knowledge Unlocked

Five things to remember about this alphabet pattern

Print the reverse repeating triangle the beginner-friendly way.

5
Core concepts
02

Outer loop

Picks the row letter

Code
A 03

Inner loop

Repeats with cout << i

Code
04

Newline

Ends each row

I/O
O 05

Complexity

O(n²) time

Analysis

❓ Frequently Asked Questions

Program 9 uses A, BB, CCC, ... (letters increase). Program 10 uses E, DD, CCC, ... (letters decrease) with the same growing repeat counts.
On the 4th row the outer-loop letter is B, and the inner loop runs four times, printing B each time.
j only controls how many times the loop runs. Printing i keeps the row the same letter; printing j would change letters across the row.
cout << ch stays on the same line. cout << "\n" ends the current line. Letters use cout << i; the row break uses cout << "\n" after the inner loop.
O(n²) where n is the number of rows. Total letter prints equal 1+2+…+n = n(n+1)/2.
Yes. cout << string(repeat, ch) << "\n" prints a full repeated-letter row in one call. Nested loops are better for learning; the string constructor is a handy shortcut later.
After cin >> rows, check cin.fail() or use if (!(cin >> rows)) to handle bad input. Clamp rows between 1 and 26 so you stay within A–Z.
Top letter math can go past Z. Clamp to 26 for A–Z demos, or define a clear wrap/error policy.

Did you Know? 🔊

This pattern is the reverse of Program 9: row widths still grow 1, 2, 3, …, but letters run backward (E, then D, then C, …). Print the outer loop letter inside the inner loop so each row stays uniform.

Continue to Alphabet Pattern 11

Keep building letter patterns with nested loops and char math.

Program 11 tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

12 people found this page helpful