2016-10-09 10 views
0

出力する行数に値「n」を入力するパスカルの三角形を作成し、適切に書式設定しようとしています。ここでの問題は、13行を過ぎた正しいフォーマットを取得することです。 13行目を超える数字は4つ以上のスペースを必要とする傾向があるため、問題は%4dにあると考えています。私は、(本質的に)nの無限の値のために、どうやってそのようなものを実装することができないのか分かりません(私は二重変数の限界を知っています。また、私は配列の使用を実装していないソリューションを好むだろう。「n」行のパスカルの三角書式設定の問題(Java)

double n; 
    for (int i = 0; i < n; i++){ 
     int number = 1; 
     System.out.printf("%" + (n - i) * 2 + "s", ""); 
     for (int j = 0; j <= i; j++){ 
      System.out.printf("%4d", number); 
      number = number * (i - j)/(j + 1); 
     } 
     System.out.println(); 
    } 
+1

なぜ最後の行が最初に始まらないのでしょうか。そうすれば、必要とする最大のスペースをより良く知ることができます。各行をスタックに入れ、スタックが空になるまで印刷します。 –

+0

パスカルはプログラミング言語です。その言語に関する質問がない限り、Pascalタグは使用しないでください。タグの上にカーソルを置くと、StackOverflowによってタグの意味がわかります。 – ajb

答えて

0

これは、行列を用いて可能な解決策である...

import java.util.Scanner; 

public class PascalTriangle { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Type N: "); 
     pascalTriangle(scanner.nextInt()); 
     scanner.close(); 
    } 

    public static void pascalTriangle(final int N) { 
     int[][] triangle = new int[N][N]; 

     for (int i = 0; i < N; i++) { 
      for (int j = 0; j <= i; j++) { 
       if (j == 0) 
        triangle[i][0] = 1; 
       else 
        triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; 
       System.out.print(triangle[i][j] + "\t"); 
      } 
      System.out.println(); 
     } 
    } 
} 

出力:ここ

Type N: 13 
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 
0

数式代わりのアレイを使用して、より良い解決策:

import java.util.Scanner; 

public class PascalTriangle { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Type N: "); 
     pascalTriangle(scanner.nextInt()); 
     scanner.close(); 
    } 

    public static void pascalTriangle(final int N) { 
     int row, num; 
     for (int i = 0; i < N; i++) { 
      num = 1; 
      row = i + 1; 
      for (int col = 0; col <= i; col++) { 
       if (col > 0) 
        num = num * (row - col)/col; 
       System.out.print(num + "\t"); 
      } 
      System.out.println(); 
     } 
    } 
} 

出力:

Type N: 13 
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