An inverted right-aligned triangle shrinks star counts while staying flush on the right: row i has i - 1 leading spaces and rows - i + 1 stars.
Remember
Rule: spaces = i - 1, stars = rows - i + 1
*****
****
***
**
* ← 5 rows (spaces shown as blanks)
It combines Program 2’s shrinking stars with Program 3’s right alignment. Every row still has width rows before the newline.
Approach
How to Solve It
Two inner loops per row — spaces then stars — or the same formulas with explicit counts and putchar.
Method
Idea
Best for
Nested loops
j < i spaces, then k = i..rows stars
Learning, interviews, exams
Explicit counts + putchar
spaces = i - 1, stars = rows - i + 1
Clearer demos once formulas click
Pseudocode
Pseudocode
for i from 1 to rows:
for j from 1 to i - 1: // i - 1 spaces
print " " (no newline)
for k from i to rows: // rows - i + 1 stars
print "*" (no newline)
print newline
Cheat sheet
Goal
Pattern
Walk each row
for (i = 1; i <= rows; i++)
Leading spaces
for (j = 1; j < i; j++) printf(" ");
Shrinking stars
for (k = i; k <= rows; k++) printf("*");
Star count form
for (k = 1; k <= rows - i + 1; k++)
Fixed width check
(i - 1) + (rows - i + 1) == rows
End the row
printf("\n");
Printing Stars vs Starting a New Line
API
Effect
Use for
printf(" ") / printf("*")
Stays on the same line
Each space and each *
printf("\n")
Ends the current line
After spaces and stars for that row
Try it
Live Preview
Change the row count and the inverted right-aligned triangle updates instantly.
Whole numbers from 1 to 20. Each row has width rows (spaces + stars).
Live result5 rows · 15 stars
*****
****
***
**
*
Trace
Worked Walkthrough — rows = 4
Trace spaces, stars, and total width for each outer-loop value of i.
i
Spaces i - 1
Stars rows - i + 1
Width
Printed row
1
0
4
4
****
2
1
3
4
***
3
2
2
4
**
4
3
1
4
*
Total stars: 4 + 3 + 2 + 1 = 10 = 4×5/2. Width stays 4 on every row.
Code
C Programs
Three complete programs: fixed rows, console input, and explicit counts with putchar. Use View Output to reveal sample results.
Example 1 — Fixed rows = 5
Hard-coded height — space loop with j < i, star loop with k from i to rows.
c
#include <stdio.h>
int main(void) {
int rows = 5;
int i, j, k;
for (i = 1; i <= rows; ++i) {
for (j = 1; j < i; ++j) {
printf(" ");
}
for (k = i; k <= rows; ++k) {
printf("*");
}
printf("\n");
}
return 0;
}
Output
*****
****
***
**
*
How It Works
1. Set height.rows = 5 means five lines, each of width 5.
2. Outer loop picks the row.i runs from 1 to rows.
3. Spaces then stars. Print i - 1 spaces (j < i), then stars for k = i..rows (that is rows - i + 1 stars).
4. Break the line.printf("\n") after both inner loops starts the next row.
When i = 1: 0 spaces + 5 stars. When i = 5: 4 spaces + 1 star.
Example 2 — User Input Version
Read the row count at runtime. Prefer checking scanf’s return value (shown in the tip below).
c
#include <stdio.h>
int main(void) {
int rows;
int i, j, k;
printf("Enter the number of rows: ");
scanf("%d", &rows);
for (i = 1; i <= rows; ++i) {
for (j = 1; j < i; ++j) {
printf(" ");
}
for (k = i; k <= rows; ++k) {
printf("*");
}
printf("\n");
}
return 0;
}
Output (when user enters 4)
Enter the number of rows: 4
****
***
**
*
How It Works
1. Prompt and read. Ask for a row count, then fill rows with scanf.
2. Same nested-loop core. Only the source of rows changes — the print logic matches Example 1.
3. Safer input tip. Ignoring scanf’s return leaves rows unset on bad input. Prefer:
Safer input
if (scanf("%d", &rows) != 1 || rows < 1) {
printf("Enter a positive whole number.\n");
return 1;
}
Example 3 — putchar + Explicit Counts
Name the space and star counts, then print each run with putchar.
c
#include <stdio.h>
int main(void) {
int rows = 5;
int i, j;
for (i = 1; i <= rows; ++i) {
int spaces = i - 1;
int stars = rows - i + 1;
for (j = 1; j <= spaces; ++j) {
putchar(' ');
}
for (j = 1; j <= stars; ++j) {
putchar('*');
}
putchar('\n');
}
return 0;
}
Output
*****
****
***
**
*
How It Works
1. Compute both counts.spaces = i - 1 and stars = rows - i + 1 make the invert-and-align rule obvious.
2. Print with putchar. Loop once for spaces, once for stars, then putchar('\n').
3. Learn loops first. Use Examples 1–2 when you need to show j < i and k = i..rows; treat this as a polish shortcut afterward.
Edge Cases & Pitfalls
Check these before calling the solution done.
j <= i
One extra space
Space loop must be j < i (exactly i - 1 spaces). j <= i breaks the right edge.
Program 3 formulas
Grows instead
rows - i spaces and 1..i stars is Program 3. Here use i - 1 and rows - i + 1.
No spaces
Left-aligned invert
Skipping the space loop gives Program 2. Right alignment needs leading spaces.
rows = 1
Single star
0 spaces + 1 star — same tip case as the other triangle pages.
rows ≤ 0
Empty output
Outer loop never runs. Validate and re-prompt for interactive programs.
Bad scanf
Check the return
If scanf fails, rows is uninitialized — always test != 1.
Analysis
Time and Space Complexity
Program
Time
Extra space
Nested loops (Examples 1–2)
O(rows²)
O(1)
putchar + counts (Example 3)
O(rows²)
O(1)
Each of n rows prints Θ(n) characters (spaces + stars). Star count alone is still n(n+1)/2.
Remember
Key Takeaways
Formulas:i - 1 spaces and rows - i + 1 stars.
Fixed width: spaces + stars = rows on every line.
Break the row: print spaces/stars without a newline; call printf("\n") after both loops.
Complexity:O(n²) time; O(1) extra space for nested loops.
One line: print i - 1 spaces, then rows - i + 1 stars — inverted and flush right.
Frequently Asked Questions
For each row i from 1 to rows, print i minus 1 spaces, then print stars with k running from i to rows inclusive. That prints rows minus i plus 1 stars. Row 1 has no spaces and rows stars; each later row adds one space and removes one star while keeping the same right edge.
The range i through rows has length rows minus i plus 1, which matches the star count. An equivalent loop is k from 1 to rows minus i plus 1.
Program 3 uses (rows - i) spaces and stars 1 through i. Program 4 uses (i - 1) spaces and stars i through rows. Same right alignment; star counts grow in Program 3 and shrink in Program 4.
Program 2 is left-aligned with shrinking stars. Program 4 adds growing leading spaces so the same shrinking star counts stay flush on the right.
printf("*") or printf(" ") stays on the same line. printf("\n") ends the current line. Spaces and stars use printf without a newline; the row break comes after both inner loops.
O(n²) for n rows. Each row prints on the order of n characters; there are n rows.
j from 1 to i-1 (written as j < i) prints exactly i - 1 spaces. Using j <= i would add one extra space and break the right edge.
Check scanf's return value: if (scanf("%d", &rows) != 1) handle bad input. Unchecked scanf leaves rows uninitialized on failure.
🤔
Did you know?
This pattern merges Program 2’s shrinking star count with Program 3’s right alignment. Every row still has width rows: (i - 1) + (rows - i + 1) = rows.