2016-10-09 4 views
0

Я пытаюсь создать и правильно отформатировать Треугольник Паскаля, где пользователь вводит значение «n» для количества строк, которые будут выводиться. Проблема здесь в том, чтобы получить правильный формат из 13 строк. Я думаю, что проблема связана с% 4d, так как числа, которые превышают 13-ю строку, будут иметь тенденцию нуждаться в более чем 4 пробелах. Я просто не знаю, как я могу реализовать что-то подобное для (по существу) бесконечного значения 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 - это язык программирования. Пожалуйста, не используйте тег 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 
Смежные вопросы