C Repeating Number Pattern (Shrinking)

Beginner
5 min read
Updated: Sep 2026
3 programs
Live preview

What Is This Pattern?

A shrinking repeating number pattern prints digit i repeated rows - i + 1 times, counting i up from 1 so each row gets shorter.

Remember
Rule: for i = 1..n, print i exactly (n - i + 1) times

11111
2222
333
44
5       ← 5 rows

In C you solve it with two nested for loops: the outer loop picks the digit, the inner loop runs from i to rows with printf("%d", i), then printf("\n") ends the row. Program 11 is the inverted twin (55555, 4444, 333…).

How to Solve It

Outer loop counts up from 1 to rows. Inner loop runs from i to rows so width shrinks. End each row with printf("\n").

MethodIdeaBest for
Nested loopsOuter picks digit 1..n; inner runs i..n so width shrinksLearning, interviews, exams
putcharWrite each repeated digit without a format stringLeaner demos once loops click

Pseudocode

Pseudocode
for i from 1 to rows:
    for j from i to rows:
        print i (no newline)
    print newline

Cheat sheet

GoalPattern
Pick digit (count up)for (i = 1; i <= rows; i++)
Shrink repeatsfor (j = i; j <= rows; j++) printf("%d", i);
End the rowprintf("\n");
putchar formputchar('0' + i); inside the same inner loop
Inverted twin (Program 11)for (i = rows; i >= 1; i--) with printf("%d", i) × i

Printing Numbers vs Starting a New Line

APIEffectUse for
printf("%d", i)Stays on the same lineEach repeat of digit i
printf("\n")Ends the current lineAfter the inner loop

Print all repeats without a newline, then end the row once.

Live Preview

Change the row count and the shrinking pattern 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 result 5 rows · 15 digits
11111
2222
333
44
5

Worked Walkthrough — rows = 4

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

iInner jRepeatsPrinted row
11..441111
22..43222
33..4233
44..414

Total digits are 4+3+2+1 = 10 — the triangular number n(n+1)/2.

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 counts up; inner loop runs from i to rows so each row shrinks.

C
#include <stdio.h>

int main(void)
{
    int rows = 5;
    int i, j;

    for (i = 1; i <= rows; i++)
    {
        for (j = i; j <= rows; j++)
            printf("%d", i);

        printf("\n");
    }

    return 0;
}

How It Works

1. Count up. for (i = 1; i <= rows; i++) yields 1, 2, 3, 4, 5 — the digit for each row.

2. Shrink width. When i = 1, the inner loop runs five times (11111); when i = 5, just once (5).

3. Newline. printf("\n") after the inner loop starts the next shorter row.

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 = 1; i <= rows; i++)
    {
        for (j = i; j <= rows; j++)
            printf("%d", i);

        printf("\n");
    }

    return 0;
}

How It Works

1. Validate rows. Require scanf success and rows >= 1.

2. Same nested loops. Four rows start at 1111 and end at 4.

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 = 1; i <= rows; i++)
    {
        for (j = i; j <= rows; j++)
            putchar('0' + i);

        putchar('\n');
    }

    return 0;
}

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 (j = 1; j <= i; j++)

That grows repeats (1, 22, 333 — Program 9). Keep j from i to rows so width shrinks.

\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 start

j = 1 instead of j = i

Starting at 1 every time makes every row length rows — you get a rectangle, not a shrinking triangle.

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.

Time and Space Complexity

ProgramTimeExtra space
Nested loops (Examples 1–2)O(n²)O(1)
putchar shortcut (Example 3)O(n²)O(1)

There are n rows printing n+(n-1)+…+1 digits, so total work is n(n+1)/2.

Key Takeaways

  • Rule: for i = 1..n, print digit i exactly n - i + 1 times.
  • Inner bound: j from i to rows shrinks the width as the digit grows.
  • printf vs newline: repeats stay on the line; printf("\n") advances after each row.
  • Next step: Program 13 introduces alternating rows.

One line: for each digit from 1 to n, print it n-i+1 times with printf, then printf("\n").

Frequently Asked Questions

The inner loop runs from j = i to rows. As i increases (1, 2, 3, …), the inner loop runs fewer times, so each row prints fewer copies of the row digit.
On the first row, i = 1 and the inner loop runs from 1 to rows, so it prints 1 exactly rows times — five 1s when rows = 5.
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.
Use the inner loop as 1..i instead of i..rows so the repeat count grows (see Program 9).
Program 11 counts the outer loop down and repeats digit i exactly i times (55555, 4444, 333, 22, 1). Program 12 counts up and uses for (j = i; j <= rows; j++) so digit i repeats rows - i + 1 times (11111, 2222, 333, 44, 5).
O(n²) where n is the number of rows. Total digit prints equal n+(n-1)+…+1 = 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 up from 1, while the inner loop starts at i and runs to rows, so each row shrinks — still O(n²) total prints.

Next: Alternating Rows

Mix directions on each row for the next pattern challenge.

Program 13 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