Descending Number Triangle in C#

What You’ll Learn
How to print a descending number triangle in C# using nested for loops. Each row starts at 1 and prints up to a decreasing limit: rows, rows-1, ..., down to 1.
This pattern is a simple way to understand how the outer loop controls rows and the inner loop controls how many numbers appear per row.
⭐ Pattern Output
For rows = 5, the pattern looks like this:
12345
1234
123
12
1Complete C# Program
The outer loop starts from rows and counts down. The inner loop prints numbers from 1 to the current row limit.
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int rows = 5;
int i, j;
for (i = rows; i >= 1; i--)
{
for (j = 1; j <= i; j++)
{
Console.Write(j);
}
Console.WriteLine();
}
}
}
}🧠 How It Works
Choose the row count
int rows = 5; sets how many lines will be printed.
Outer loop (descending rows)
for (i = rows; i >= 1; i--) controls the triangle height and ensures each next row has one fewer number than the previous.
Inner loop (print 1..i)
for (j = 1; j <= i; j++) prints digits from 1 up to the current row limit i using Console.Write(j).
New line
Console.WriteLine() moves to the next row after each line.
Descending number triangle
Total numbers printed: 1+2+…+n = n(n+1)/2, so time complexity is O(n²) for n rows.
Variation — User Input Version
Let the user decide the number of rows at runtime using Console.ReadLine():
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
int rows;
int i, j;
Console.Write("Enter the number of rows: ");
rows = Convert.ToInt32(Console.ReadLine());
for (i = rows; i >= 1; i--)
{
for (j = 1; j <= i; j++)
{
Console.Write(j);
}
Console.WriteLine();
}
}
}
}💡 Tips for Enhancement
Try These
- Validate input with
int.TryParsebefore usingrows - Print the ascending triangle by counting the outer loop up
- Add spaces between numbers with
Console.Write(j + " ") - Right-align the triangle by printing leading spaces before each row
- Replace numbers with characters to create alphabet patterns
Avoid
- Forgetting
Console.WriteLine()between rows - Using negative or zero rows without validating input
- Mixing row/column logic (keep the outer loop for rows)
- Printing a trailing space unless you actually want spacing
Key Takeaways
The outer loop decreases the row length (from rows down to 1).
The inner loop prints numbers from 1 to the current row limit i.
Total printed digits follow the triangular number count: n(n+1)/2.
The same nested-loop idea applies to star triangles and alphabet triangles.
❓ Frequently Asked Questions
12345, then 1234, then 123, and so on until 1.i (from rows down to 1). The inner loop prints j from 1 to i, then prints a newline.for (i = 1; i <= rows; i++) as the outer loop. Each row will then grow from 1 number up to rows numbers.Explore More C# Number Patterns!
From pyramids to Floyd’s triangle and beyond—practice nested loops with progressively richer patterns.
The total number of printed digits grows like a triangular number. If you print n rows, the total count is 1+2+…+n = n(n+1)/2. For n = 5, that’s 15 digits.
12 people found this page helpful
