Shape Rule
Centered pyramid
Row 1 prints 1, row 2 prints 2 3 4, row 3 prints 5 6 7 8 9 with leading spaces.

The centered continuous number pyramid prints 1, then 2 3 4, then 5 6 7 8 9 — a natural step after the mirror pattern in Program 23. This tutorial covers odd row widths, leading spaces, a running counter k, a live preview, algorithm steps, worked C# examples, edge cases, and complexity.
Centered pyramid
Row 1 prints 1, row 2 prints 2 3 4, row 3 prints 5 6 7 8 9 with leading spaces.
i += 2
for (i = 1; i <= max; i += 2) sets odd row widths 1, 3, 5.
if (j > i)
Reverse loop prints spaces first, then k++ for each number slot.
k never resets
k = 1 before the outer loop; k++ continues across rows.
Odd widths 1–9
Pick a max odd width and draw the centered pyramid instantly in the browser.
Complexity
Each row scans max columns; total work scales as n².
A centered continuous number pyramid prints numbers that keep counting across rows, with leading spaces to center each row. With max width 5, the output is 1, 2 3 4, 5 6 7 8 9 (spaces shown in the worked examples below).
In C# you use an outer loop with odd widths, a reverse inner loop with an if for spaces vs k++, then Console.WriteLine() ends each row.
It combines spacing logic with a persistent counter — a step up from Program 23’s three inner loops.
i = 1, 3, 5 controls how many numbers print per row.
if (j > i) prints spaces before numbers.
k++ never resets — numbers flow across rows.
Follow Program 23; continue to Program 25 (bidirectional triangle) next.
In short: for each odd i, scan j from max down to 1 — print a space when j > i, else print k++, then WriteLine().
Given a positive odd max width (e.g. 5), print a centered pyramid where numbers increase continuously across rows using a counter k.
// max = 5 (conceptual shape — dots show spaces)
// ··1·
// ·2·3·4
// 5·6·7·8·9 | Item | Type | Description |
|---|---|---|
max | int | Maximum odd row width — inner loop scans j from max down to 1. |
i | int | Outer loop — odd row widths 1, 3, 5 via i += 2. |
j | int | Reverse inner loop — spaces when j > i, else print number. |
k | int | Running counter — starts at 1, increments with k++ across all rows. |
k = 1
for i from 1 to max step 2:
for j from max down to 1:
if j > i:
print space
else:
print k; k = k + 1
print newline | Approach | Idea | Best for |
|---|---|---|
| Spacing + counter | 1, 2 3 4, 5 6 7 8 9 | Learning and interviews |
| User-input max | int max = Convert.ToInt32(...) | Flexible console programs |
| Safe input | int.TryParse + even-width adjustment | Robust user-facing demos |
| Goal | Pattern |
|---|---|
| Walk rows | for (i = 1; i <= max; i += 2) |
| Init counter | k = 1; before the outer loop |
| Scan columns | for (j = max; j >= 1; j--) |
| Space or number | if (j > i) Console.Write(" "); else Console.Write(k++ + " "); |
| End the row | Console.WriteLine(); |
| User input | int max = Convert.ToInt32(Console.ReadLine()); |
Same centered pyramid — different ways to control width and input validation.
i += 2Odd row widths 1, 3, 5
j > iLeading spaces center each row
k++Numbers continue across rows
if/elseOne inner loop handles space vs number
Reach for this pattern when teaching centering with spaces, persistent counters, and if/else inside nested loops.
Natural follow-up after Program 23 — introduces spacing logic and a running counter.
Outer/inner bound practice with an immediate visual check.
Combine loops with ReadLine for a flexible row count.
Compare Program 23 (mirror pattern) and Program 25 (bidirectional triangle) next.
This is a console teaching pattern — not how you build modern app screens.
Key benefit: one small program that locks in nested loops, output sequencing, and O(n²) thinking.
Choose an odd max width between 1 and 9 and draw the centered continuous pyramid in the browser.
Three complete C# programs — fixed max width, user input, and safe input with validation. Click View Output to reveal sample console results.
Print three rows of the centered pyramid with a running counter.
max = 5Hard-coded width — ideal for first demos and screenshots.
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int i, j, k;
k = 1;
for (i = 1; i <= 5; i += 2)
{
for (j = 5; j >= 1; j--)
{
if (j > i)
Console.Write(" ");
else
Console.Write(k++ + " ");
}
Console.WriteLine();
}
}
}
} When i = 1, print two spaces then 1 — output 1. When i = 3, print one space then 2 3 4. When i = 5, print 5 6 7 8 9 with no leading spaces. k never resets, so numbers continue across rows.
Read the maximum odd width from the console instead of hard-coding 5.
Read max from the console; adjust even widths to the nearest odd value.
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter the maximum odd width: ");
int max = Convert.ToInt32(Console.ReadLine());
if (max % 2 == 0) max -= 1;
if (max < 1) return;
int k = 1;
for (int i = 1; i <= max; i += 2)
{
for (int j = max; j >= 1; j--)
{
if (j > i) Console.Write(" ");
else Console.Write(k++ + " ");
}
Console.WriteLine();
}
}
}
} Same spacing + counter core as Example 1; only the source of max changes. The even-width adjustment keeps row sizes odd for a proper pyramid shape.
Use int.TryParse so bad console input does not crash the program.
TryParseValidate input before drawing the pyramid — prompt again on failure.
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int max;
Console.Write("Enter the maximum odd width: ");
while (!int.TryParse(Console.ReadLine(), out max) || max < 1)
{
Console.Write("Please enter a positive whole number: ");
}
if (max % 2 == 0) max -= 1;
int k = 1;
for (int i = 1; i <= max; i += 2)
{
for (int j = max; j >= 1; j--)
{
if (j > i) Console.Write(" ");
else Console.Write(k++ + " ");
}
Console.WriteLine();
}
}
}
} TryParse returns false on bad input instead of throwing. The loop re-prompts until a valid positive integer is entered, then the pyramid draws as usual.
using System; brings in Console. Set k = 1 and loop variables i, j.
for (i = 1; i <= max; i += 2) — row widths 1, 3, 5 grow the pyramid.
for (j = max; j >= 1; j--) scans columns from right to left.
if (j > i) prints a space; else Console.Write(k++ + " ").
Console.WriteLine() ends the row after the inner loop.
Numbers continue across rows — O(n²) time, O(1) extra memory.
max = 5Trace each outer-loop value of i, leading spaces, numbers printed, and k after each row.
i | Leading spaces | Numbers printed | k after row | Row output |
|---|---|---|---|---|
1 | 2 (when j = 5, 4) | 1 | 2 | 1 |
3 | 1 (when j = 5) | 2, 3, 4 | 5 | 2 3 4 |
5 | 0 | 5, 6, 7, 8, 9 | 10 | 5 6 7 8 9 |
Leading spaces per row = (max - i) / 2 when max is odd — centers each row.
Where this tiny pattern (and its loop structure) shows up beyond the homework prompt.
Clearest visual proof that outer and inner bounds interact.
Example: put WriteLine inside the inner loop by mistake.
Foundation for inverted, pyramid, diamond, and hollow variants.
Example: reset k each row and compare output.
Practice Write vs WriteLine without complex math.
Example: put WriteLine inside the inner loop by mistake.
Swap digits for letters, stars, or spaced output once the loop works.
Example: print k++ + " " with padded widths for 2-digit numbers.
Triangular totals make O(n²) concrete for beginners.
Example: count printed numbers for max = 9 → 1 + 3 + 5 + 7 + 9 = 25.
Pair the pattern with TryParse and positive-row checks.
Example: reject max <= 0 and re-prompt.
Pro Tip: when an interviewer asks for patterns, explain the outer/inner roles first — then write the loops. The story matters as much as the code.
Why this pattern earns a permanent spot in beginner C# courses.
Wrong bounds show up immediately as a broken staircase.
Only loops and console output — no arrays or math libraries.
Invert, center, hollow, or change the fill character with small edits.
Streaming output needs no storage beyond loop counters.
Pro Tip: trace the reverse inner loop on paper for max = 3 before coding — spacing bugs hide in the j > i condition.
Small habits that keep number-pattern code clean.
Do not reset k inside the outer loop unless you want per-row numbering.
TryParseAvoid crashes when the user types letters instead of a number.
Only call WriteLine() after the inner loop finishes the row.
Write each i, space count, and numbers printed before coding.
Trace max = 3 on paper before coding larger demos.
Pro Tip: if the output is a vertical list of single digits per line, you almost certainly put WriteLine inside the inner loop.
Mistakes that commonly break centered pyramid patterns.
Each digit lands on its own line — you get a column, not a triangle.
→ Use Write(" ") or Write(k++ + " "); WriteLine only after the inner loop.
Putting k = 1 inside the outer loop restarts numbering — you lose the continuous effect.
→ Initialize k = 1 once before the outer loop unless you want per-row numbering.
Without if (j > i) the pyramid is left-aligned, not centered.
→ Print a space when j > i before printing numbers.
Even max values break the centering math for this version.
→ Subtract 1 when max % 2 == 0, or validate and prompt again.
Letters or empty input throw FormatException.
→ Prefer int.TryParse and re-prompt on failure.
Check these inputs before calling the solution done.
Output is just a centered 1 with leading spaces.
Outer loop never runs — print nothing or show a message.
max < 0Treat as invalid; re-prompt instead of silent empty output.
Subtract 1 to force odd width, or re-prompt for an odd value.
Convert.ToInt32 throws — use TryParse.
Two rows: centered 1 and 2 3.
Try these variations to lock in the pattern.
k = 1 inside the outer loopk++ on charsj > i shift numbers right — row width stays at max columns.Console.Write stays on the line; WriteLine advances — mix them carefully.max > 0 for interactive programs; max = 1 prints a single centered 1.Quick Takeaway: odd outer loop (i += 2), reverse inner loop with if (j > i), persistent k++, then WriteLine() after each row.
| Program | Time | Extra space |
|---|---|---|
| Nested loops (Examples 1–2) | O(n²) | O(1) |
| Safe input (Example 3) | O(n²) | O(1) |
The centered continuous number pyramid is a compact lesson in spacing and counters: print leading spaces when j > i, then k++ for each number slot. Master the fixed-max version, then try user input and safe TryParse validation.
Practice the three examples above, then continue to Program 25 for the bidirectional number triangle.
Never reset k inside the outer loop unless you want per-row numbering — validate max when reading from the console.
for (i = 1; i <= max; i += 2) in the outer loopk = 1 before the outer loopj > i, else k++int.TryParse over bare Convert.ToInt32WriteLine inside the inner loopk inside the outer loop (unless intentional)max without adjustmentmax = 1 edge casePrint the pattern the beginner-friendly way.
Spaces + k++
DefinitionOdd widths
CodeCentering
CodeNever reset
ShapeO(n²) time
AnalysisThis centered pyramid prints numbers continuously using a counter k. An if inside a reverse loop prints leading spaces when j > i, then prints k++ once the column reaches the row boundary.
Move on to the bidirectional number triangle in the C# number-pattern series.
12 people found this page helpful