In C# outer loop i from k down to 1. Per row: left half j = k..1, right half j = 2..k, value j > i ? j : i.
Approach
How to Solve It
One outer layer loop, then left and right halves with the same cell rule.
Method
Idea
Best for
Two-half row
Left k..1, right 2..k, value j > i ? j : i
Learning, interviews, exams
Input k
Same logic with a user-chosen peak
Practice / demos
Pseudocode
Pseudocode
for i from k down to 1:
for j from k down to 1:
print (j if j > i else i) and a space
for j from 2 to k:
print (j if j > i else i) and a space
print newline
Cheat sheet
Goal
Pattern
Layer loop
for (i = k; i >= 1; i--)
Left half
for (j = k; j >= 1; j--)
Right half
for (j = 2; j <= k; j++)
Cell value
Console.Write((j > i ? j : i) + " ");
End the row
Console.WriteLine();
Write vs WriteLine
API
Effect
Use for
Console.Write
Stays on the same line
Each number plus a trailing space
Console.WriteLine
Ends the current line
After both half-loops finish a row
Try it
Live Preview
Change k and the concentric square updates instantly.
Whole numbers from 1 to 9. Width = 2k - 1. Tap a chip or type a value — the preview redraws as you go.
1. Layers.i runs from 5 down to 1 — each value is one concentric row.
2. Left half.j runs k..1; print j when j > i, else print i.
3. Right half.j runs 2..k with the same rule so the row mirrors without doubling the center.
Example 2 — User Input (k)
Read k and use a ternary for the cell value.
C#
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int k, i, j;
Console.Write("Enter k: ");
if (!int.TryParse(Console.ReadLine(), out k) || k < 1)
{
Console.WriteLine("Please enter a positive whole number.");
return;
}
for (i = k; i >= 1; i--)
{
for (j = k; j >= 1; j--)
Console.Write((j > i ? j : i) + " ");
for (j = 2; j <= k; j++)
Console.Write((j > i ? j : i) + " ");
Console.WriteLine();
}
}
}
}
Output (when user enters 3)
Enter k: 3
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
How It Works
1. Validate k.TryParse rejects non-numeric input; require k >= 1.
2. Same square. Only the peak value changes; width becomes 2k - 1.
Example 3 — Compact k = 3
A smaller fixed demo — easy to trace before scaling to 5.
C#
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int k = 3;
int i, j;
for (i = k; i >= 1; i--)
{
for (j = k; j >= 1; j--)
Console.Write((j > i ? j : i) + " ");
for (j = 2; j <= k; j++)
Console.Write((j > i ? j : i) + " ");
Console.WriteLine();
}
}
}
}
Output
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
How It Works
1. Same rules. Layer down; left then right; ternary picks j or i.
2. Quick check. Three rows, five columns; center of the last row is 1.
Edge Cases & Pitfalls
Check these before calling the solution done.
j = 1..k
Right half starts at j = 1
The center digit prints twice. Start the mirror loop at j = 2.
i++
Outer loop goes 1..k
You get the inverted order (center first). Keep i from k down to 1.
j < i
Flip the comparison
Using j < i inverts layers. Stay with j > i ? j : i.
k = 1
Single cell
Output is just 1 — the right half loop never runs.
WriteLine
WriteLine inside a half-loop
That breaks the row. Call WriteLine only after both inner loops.
Bad input
Convert.ToInt32 throws
Prefer int.TryParse so non-numeric input does not crash the program.
Analysis
Time and Space Complexity
Program
Time
Extra space
Fixed / compact (Examples 1, 3)
O(k²)
O(1)
User input (Example 2)
O(k²)
O(1)
There are k rows and 2k - 1 cells per row, so total prints are about 2k² — quadratic in k.
Remember
Key Takeaways
Rule: layers k..1; cell value is j > i ? j : i.
Shape: left k..1, right 2..k — width 2k - 1.
Write vs WriteLine: numbers stay on the line; WriteLine advances after both halves.
Next step: Program 47 extends this into a full concentric number diamond.
One line: for each layer, print a mirrored row using j > i ? j : i.
Frequently Asked Questions
A concentric number square: the outer layer is k (e.g. 5), values decrease toward the center to 1, then mirror back out on each row.
Each row prints a left half (j = k..1) and a right half (j = 2..k) with the same j > i rule, mirroring around the center.
When column j is still outside the current row layer i, print j. Otherwise print i (the current layer value).
The first builds the left descending half; the second mirrors columns 2..k on the right without repeating the center digit.
Change k (or read it from input). Total width becomes 2*k - 1 — see Example 2.
O(k²) because each of k rows prints about 2k - 1 cells.
Program 45 prints a star-and-zero X on a fixed grid. Program 46 prints decreasing/increasing numbers in a concentric square.
Each row has 2*k - 1 numbers. For k = 5, width is 9 columns.
Yes — Console.Write((j > i ? j : i) + " ") replaces the if-else in one expression — see Examples 2 and 3.
🤔
Did you know?
Each cell prints j when j > i, else i. Row i runs from k down to 1; grid width = 2k - 1 columns per row.