A descending repeating number triangle prints digit i repeated rows - i + 1 times, counting i down from rows.
Remember
Rule: for i = n..1, print i exactly (n - i + 1) times
5
44
333
2222
11111 ← 5 rows
In C you solve it with two nested for loops: the outer loop picks the digit, the inner loop repeats it with printf("%d", i), then printf("\n") ends the row. Program 9 is the ascending twin (1, 22, 333…).
Approach
How to Solve It
Outer loop counts down from rows to 1. Inner loop repeats digit i exactly rows - i + 1 times. End each row with printf("\n").
Method
Idea
Best for
Nested loops
Outer picks digit n..1; inner repeats it n-i+1 times
Learning, interviews, exams
putchar
Write each repeated digit without a format string
Leaner demos once loops click
Pseudocode
Pseudocode
for i from rows down to 1:
for j from rows down to i:
print i (no newline)
print newline
Cheat sheet
Goal
Pattern
Pick digit (count down)
for (i = rows; i >= 1; i--)
Repeat digit i
for (j = rows; j >= i; j--) printf("%d", i);
End the row
printf("\n");
putchar form
putchar('0' + i); inside the same inner loop
Ascending twin (Program 9)
for (i = 1; i <= rows; i++) with printf("%d", i) repeated i times
Printing Numbers vs Starting a New Line
API
Effect
Use for
printf("%d", i)
Stays on the same line
Each repeat of digit i
printf("\n")
Ends the current line
After the inner loop
Print all repeats without a newline, then end the row once.
Try it
Live Preview
Change the row count and the repeating triangle updates instantly — capped at 9 so every digit stays a single character.
Whole numbers from 1 to 9 (single digits). Tap a chip or type a value — the preview redraws as you go.
Live result5 rows · 15 digits
5
44
333
2222
11111
Trace
Worked Walkthrough — rows = 4
Trace each outer-loop value of i, how many times the inner loop runs, and the printed row.
i
Inner j
Repeats
Printed row
4
4..4
1
4
3
4..3
2
33
2
4..2
3
222
1
4..1
4
1111
Total digits are 1+2+3+4 = 10 — the triangular number n(n+1)/2.
Code
C Programs
Three complete programs: fixed height, scanf input, and a putchar shortcut. Use View Output for sample results.
Example 1 — Fixed rows = 5
Outer loop picks the digit; inner loop repeats it rows - i + 1 times.
C
#include <stdio.h>
int main(void)
{
int rows = 5;
int i, j;
for (i = rows; i >= 1; i--)
{
for (j = rows; j >= i; j--)
printf("%d", i);
printf("\n");
}
return 0;
}
Output
5
44
333
2222
11111
How It Works
1. Count down.for (i = rows; i >= 1; i--) yields 5, 4, 3, 2, 1 — the digit for each row.
2. Grow repeats. When i = 5, the inner loop runs once (5); when i = 1, it runs five times (11111).
3. Newline.printf("\n") after the inner loop starts the next longer row of a smaller digit.
Example 2 — User Input
Read the row count with scanf and reject non-positive values.
C
#include <stdio.h>
int main(void)
{
int rows;
int i, j;
printf("Enter the number of rows: ");
if (scanf("%d", &rows) != 1 || rows < 1)
{
printf("Please enter a positive integer.\n");
return 1;
}
for (i = rows; i >= 1; i--)
{
for (j = rows; j >= i; j--)
printf("%d", i);
printf("\n");
}
return 0;
}
Output (when user enters 4)
Enter the number of rows: 4
4
33
222
1111
How It Works
1. Validate rows. Require scanf success and rows >= 1.
2. Same nested loops. Four rows start at 4 and end at 1111.
3. Safer demos. Cap at single-digit rows if you want a tight look:
Safer input
if (scanf("%d", &rows) != 1 || rows < 1 || rows > 9)
{
printf("Enter a whole number from 1 to 9.\n");
return 1;
}
Example 3 — putchar Shortcut
Same loops with putchar('0' + i) — best for single-digit rows (1–9).
C
#include <stdio.h>
int main(void)
{
int rows = 5;
int i, j;
for (i = rows; i >= 1; i--)
{
for (j = rows; j >= i; j--)
putchar('0' + i);
putchar('\n');
}
return 0;
}
Output
5
44
333
2222
11111
How It Works
1. Digit as char.'0' + i maps 1..9 to characters '1'..'9'.
2. Same shape. Identical output to Example 1 — keep the printf version for exams that expect format strings.
Edge Cases & Pitfalls
Check these before calling the solution done.
wrong twin
for (i = 1; i <= rows; i++) with printf("%d", i) × i
That is Program 9 (1, 22, 333). Keep counting down and growing repeats for this pattern.
\n inside
printf("\n") inside the inner loop
That puts each digit on its own line. Print repeats without a newline; call printf("\n") only after the row finishes.
wrong count
j <= i instead of j >= i
The inner bound must be for (j = rows; j >= i; j--) so repeat count equals rows - i + 1.
rows = 1
Single digit
Output is just 1 — a good sanity check.
rows ≤ 0
Empty output
The outer loop never runs. Validate and prompt again for clearer UX.
multi-digit
rows > 9
printf("%d", 10) prints two characters. Labs usually stick to 1–9; putchar('0' + i) also assumes a single digit.
Analysis
Time and Space Complexity
Program
Time
Extra space
Nested loops (Examples 1–2)
O(n²)
O(1)
putchar shortcut (Example 3)
O(n²)
O(1)
There are n rows printing 1+2+…+n digits, so total work is n(n+1)/2.
Remember
Key Takeaways
Rule: for i = n..1, print digit i exactly n - i + 1 times.
Inner bound:j from rows down to i grows the repeat count as the digit shrinks.
printf vs newline: repeats stay on the line; printf("\n") advances after each row.
Next step: Program 11 inverts the triangle (longest row of the top digit first).
One line: for each digit from n down to 1, print it n-i+1 times with printf, then printf("\n").
Frequently Asked Questions
The outer loop decreases i from rows down to 1. The inner loop runs j from rows down to i, so it executes once when i equals rows, twice when i is rows-1, and so on until rows times for i = 1.
for (j = rows; j >= i; j--) runs (rows - i + 1) times. That count grows as i shrinks, which is why 4 prints twice, 3 prints three times, and 1 prints rows times.
printf("%d", i) stays on the same line. printf("\n") ends the current line. Repeated digits use printf; the row break uses printf("\n") after the inner loop.
Program 9 grows upward: row i repeats digit i exactly i times (1, 22, 333). Program 10 starts with one copy of the top digit and increases repeats as the digit decreases (5, 44, 333, 2222, 11111).
O(n²) where n is the number of rows. Total digit prints equal 1+2+…+n = n(n+1)/2.
Yes. putchar('0' + i) writes one digit when i is 1..9. Nested loops with printf are better for learning; putchar is a leaner shortcut once the bounds make sense.
Check scanf's return value: if (scanf("%d", &rows) != 1) handle bad input. Unchecked scanf leaves rows uninitialized on failure.
The outer loop never runs, so nothing is printed. Validate and prompt again if you want a clear user message.
🤔
Did you know?
Row digit i repeats rows - i + 1 times. The outer loop counts down from rows, so the first row shows one copy of the top digit and the last row repeats 1 for rows times — still O(n²) total prints.