パスカルの三角形とは
これをプログラムで作ってみましょう。
環境
.NET8
2次元配列 int[,]
2次元配列(int[,]
)を使用してパスカルの三角形を作成します。この場合、三角形の形状に合わせて行と列をループで処理し、値を計算します。
static void Main()
{
var num = 5;
var result = GeneratePascalsTriangleMatrix(num);
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
// あえて0も出力
// if (result[i, j] != 0)
// {
Console.Write(result[i, j]);
// }
}
Console.WriteLine();
}
}
static int[,] GeneratePascalsTriangleMatrix(int num)
{
var matrix = new int[num, num];
for (var i = 0; i < num; i++)
{
for (var j = 0; j <= i; j++)
{
if (j == 0 || j == i)
{
matrix[i, j] = 1;
}
else
{
matrix[i, j] = matrix[i - 1, j - 1] + matrix[i - 1, j];
}
}
}
return matrix;
}
10000
11000
12100
13310
14641
ジャグ配列 int[][]
次に、ジャグ配列(int[][]
)を使用してパスカルの三角形を作成します。ジャグ配列は、各行の長さを動的に変更できる配列構造です。
static void Main()
{
var num = 5;
var result = GeneratePascalsTriangleJaggedArray(num);
foreach (var row in result)
{
foreach (var value in row)
{
Console.Write(value);
}
Console.WriteLine();
}
}
static int[][] GeneratePascalsTriangleJaggedArray(int num)
{
int[][] jaggedArray = new int[num][];
for (int i = 0; i < num; i++)
{
jaggedArray[i] = new int[i + 1];
for (int j = 0; j <= i; j++)
{
if (j == 0 || j == i)
{
jaggedArray[i][j] = 1;
}
else
{
jaggedArray[i][j] = jaggedArray[i - 1][j - 1] + jaggedArray[i - 1][j];
}
}
}
return jaggedArray;
}
1
11
121
1331
14641
可変長配列 List<List<int>>
最後に、List<List<int>>
を使用して作成します。
static void Main()
{
var num = 5;
var result = GeneratePascalsTriangleList(num);
foreach (var row in result)
{
foreach (var value in row)
{
Console.Write(value);
}
Console.WriteLine();
}
}
static List<List<int>> GeneratePascalsTriangleList(int num)
{
var list = new List<List<int>>();
for (int i = 0; i < num; i++)
{
var row = new List<int>();
for (int j = 0; j <= i; j++)
{
if (j == 0 || j == i)
{
row.Add(1);
}
else
{
row.Add(list[i - 1][j - 1] + list[i - 1][j]);
}
}
list.Add(row);
}
return list;
}
1
11
121
1331
14641
気をつけること
-
多次元配列とジャグ配列は別物
- 主に静的型付け言語では、多次元配列(int[,])とジャグ配列(int[][])は別物です
初期化や扱い方が異なるため、コードを書く際に注意してください。
- 主に静的型付け言語では、多次元配列(int[,])とジャグ配列(int[][])は別物です
-
プラットフォームによる仕様の違い
- 動的型付け言語(例: Python、JavaScript)では「ジャグ配列」の概念はありません。リストや配列がそのままジャグ配列のように振る舞います
- 静的型付け言語(例: C#、Java)では、明確に「多次元配列」と「ジャグ配列」を区別する必要があります
-
競技プログラミングでの注意点
- 言語仕様が違う場合、問題文中では「2次元配列」と書いてあっても、ジャグ配列の形式を要求されることがあります
- 提出コードで意図通りに動作しない場合は、配列の形状を再確認しましょう