1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】パスカルの三角形を色々な配列で作ってみる

Posted at

パスカルの三角形とは

これをプログラムで作ってみましょう。

環境

.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

気をつけること

  1. 多次元配列とジャグ配列は別物

    • 主に静的型付け言語では、多次元配列(int[,])とジャグ配列(int[][])は別物です
      初期化や扱い方が異なるため、コードを書く際に注意してください。
  2. プラットフォームによる仕様の違い

    • 動的型付け言語(例: Python、JavaScript)では「ジャグ配列」の概念はありません。リストや配列がそのままジャグ配列のように振る舞います
    • 静的型付け言語(例: C#、Java)では、明確に「多次元配列」と「ジャグ配列」を区別する必要があります
  3. 競技プログラミングでの注意点

    • 言語仕様が違う場合、問題文中では「2次元配列」と書いてあっても、ジャグ配列の形式を要求されることがあります
    • 提出コードで意図通りに動作しない場合は、配列の形状を再確認しましょう
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?