7

パスカルの三角形を生成するために 2 次元配列を使用する必要がある小さな課題があります。これが私のコードで、動作します。次のように三角形を表示すると、追加のクレジットの機会があります。

パスカルの三角形

ただし、私の間隔はそのようにフォーマットされていません。数字をすべて左側に並べて表示するだけです。説明するのは難しいですが、実行すると、私の意味がわかります。

これが私のコードです:

public class Pascal {
    public static final int ROW = 16;
    public static void main(String[] args) {
        int[][] pascal = new int[ROW + 1][];
        pascal[1] = new int[1 + 2];
        pascal[1][1] = 1;
        for (int i = 2; i <= ROW; i++) {
            pascal[i] = new int[i + 2];
            for (int j = 1; j < pascal[i].length - 1; j++) {
                pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
            }
        }
        for (int i = 1; i <= ROW; i++) {
            for (int j = 1; j < pascal[i].length - 1; j++) {
                System.out.print(pascal[i][j] + " ");
            }
            System.out.println();
        }
    }
}

誰かが私のプログラムに正しい間隔を追加して、写真で必要な出力を生成する方法を理解するのを手伝ってくれたら、それは素晴らしいことです. 私はどこかに置く必要があることを知っていSystem.out.print(" ")ます。どこにあるのかわからないだけです。

4

5 に答える 5

7

ここでコードを変更しました。コンソール ウィンドウの制限により、ROW サイズが 13 まで見事に出力されます。

import java.util.*;

public class Pascal {
    public static final int ROW = 12;
    private static int max = 0;

    public static void main(String[] args) {
        int[][] pascal = new int[ROW + 1][];
        pascal[1] = new int[1 + 2];
        pascal[1][1] = 1;
        for (int i = 2; i <= ROW; i++) {
            pascal[i] = new int[i + 2];
            for (int j = 1; j < pascal[i].length - 1; j++) {
                pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
                String str = Integer.toString(pascal[i][j]);
                int len = str.length();
                if (len > max)
                    max = len;
            }
        }

        for (int i = 1; i <= ROW; i++) {
            for (int k = ROW; k > i; k--)
                System.out.format("%-" + max + "s", " ");
            for (int j = 1; j < pascal[i].length - 1; j++)
                System.out.format("%-" + (max + max) + "s", pascal[i][j]);
            System.out.println();
        }
    }
}

出力:

                                 1     
                              1     1     
                           1     2     1     
                        1     3     3     1     
                     1     4     6     4     1     
                  1     5     10    10    5     1     
               1     6     15    20    15    6     1     
            1     7     21    35    35    21    7     1     
         1     8     28    56    70    56    28    8     1     
      1     9     36    84    126   126   84    36    9     1     
   1     10    45    120   210   252   210   120   45    10    1     
1     11    55    165   330   462   462   330   165   55    11    1     
于 2012-01-20T09:44:20.967 に答える
5

大きな数字が占有するスペースに対応するために、特定の数字に空白を追加する必要があるため、スペースの問題が発生しています。最初に、出力する予定の最大数を (プログラムで) 決定します。次に、その数値 log(n) の桁数を決定します。次に、この数値を使用して、最大の数値よりも桁数が少ない数値の空白を印刷して、印刷の見栄えを良くすることができます。

于 2012-01-20T00:24:14.023 に答える
0

以下のコードも参照できます。

public class Pascal {
    public static final int ROW = 16;

    static long factorial(int ROW) {
        long f;
        for (f = 1; ROW > 1; ROW--) {
            f *= ROW;
        }
        return f;
    }

    static long patt(int ROW, int r) {
        return factorial(ROW) / (factorial(ROW - r) * factorial(r));
    }

    public static void main(String args[]) {
        System.out.println();
        int i, j;
        for (i = 0; i <= ROW; i++) {
            for (j = 0; j <= ROW - i; j++) {
                System.out.print(" ");
            }
            for (j = 0; j <= i; j++) {
                System.out.print(" " + patt(i, j));
            }
            System.out.println();
        }
    }
}

出力:

                  1
                 1 1
                1 2 1
               1 3 3 1
              1 4 6 4 1
             1 5 10 10 5 1
            1 6 15 20 15 6 1
           1 7 21 35 35 21 7 1
          1 8 28 56 70 56 28 8 1
         1 9 36 84 126 126 84 36 9 1
        1 10 45 120 210 252 210 120 45 10 1
       1 11 55 165 330 462 462 330 165 55 11 1
      1 12 66 220 495 792 924 792 495 220 66 12 1
     1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
    1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
   1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
  1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
于 2021-06-24T17:14:07.123 に答える