Pascal Triangle Positioning

*爱你&永不变心* 提交于 2019-12-24 14:27:51

问题


I made a Java program that prints out a pascal triangle, however I can't figure out how to correctly position it.

Program 1

public class Triangle {
    public static void main() {
        System.out.println("\nTriangle: ");
        int row = 11;
        long[][] triangle = new long[row][row];
        triangle[1][1] = 1;
        System.out.print(triangle[1][1] + "\n");

        for (int i = 2; i<row; i++) {
            for (int n = 1; n<row; n++) {
                triangle[i][n] = triangle[i-1][n-1] + triangle[i-1][n];
                if (triangle[i][n]>0) {
                    System.out.print(triangle[i][n] + " ");
                }
            }
            System.out.println();
        }        
    }
}

Output:

1
1 1
1 2 1
1 3 3 1

Program 2

public class Triangle {
    public static void main() {
        System.out.println("\nTriangle: ");
        int row = 11;
        long[][] triangle = new long[row][row];
        int x = 1;        
        while (x<row-1) {
            System.out.print(" ");
            x++;
        }
        triangle[1][1] = 1;
        System.out.print(triangle[1][1] + "\n");

        for (int i = 2; i<row; i++) {
            x = i;
            while (x<row-1) {
                System.out.print(" ");
                x++;
            }
            for (int n = 1; n<row; n++) {
                triangle[i][n] = triangle[i-1][n-1] + triangle[i-1][n];
                if (triangle[i][n]>0) {
                    System.out.print(triangle[i][n] + " ");
                }
            }
            System.out.println();
        }        
    }
}

Output:

     1
    1 1 
   1 2 1 
  1 3 3 1 
 1 4 6 4 1 
1 5 10 10 5 1 //(Notice this line is incorrectly positioned)

When the triangle approaches multiple digit numbers, it starts to break down and makes it ugly. Can someone explain how I can display a normal triangle instead of this ugly one?


回答1:


Dynamic Pascal Triangle generator is here:

import java.io.IOException;
import java.util.Scanner;

public class Main
{
static double fact(int n)
{
    double result = 1;
    for (double i = 1; i <= n; i++)
        result *= i;
    return result;
}

static double combine(int n, int r)
{
    return ((fact(n)) / (fact(n - r) * fact(r)));
}

static void pascalTriangle(int n)
{
    int n2 = n;
    for (int i = 0; i < n; i++)
    {
        for (int space = 8 * (n2 - 1); space >= 0; space--)
        {
            System.out.printf(" ");
        }
        for (int j = 0; j <= i; j++)
        {
            System.out.printf("%14.0f", combine(i, j));
            System.out.printf("  ");
        }
        System.out.println();
        n2--;
    }
  }

  public static void main(String[] args) throws IOException, InterruptedException
    {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter Number of Lines(n): ");
    int n = sc.nextInt();
    pascalTriangle(n);
    System.out.println("Press any key to exit! ");
    sc.nextByte();
    }
}



回答2:


/**
 *
 * @author Ranjith
 */
public class JavaApplication2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       int i;
       int x; 
       int   n=15; //number of rows
        String newLine = System.getProperty("line.separator");

        for(i=0;i<n;i++)//loop to adjust spacing
        {   
             x = i;
            while (x<n-1) {
                System.out.print(" ");
                x++;
            }
            fib(i); //fibonacci function is called
            System.out.print(newLine );
        }
    }
    public static void fib (int num) //fibonacci function
    {    
          int[] febo = new int[100];
         febo[0] = 0;
         febo[1] = 1;

         for(int i=2; i < num; i++){
             febo[i] = febo[i-1] + febo[i-2];
         }

         for(int i=0; i< num; i++){
                 System.out.print(febo[i] + "  ");
         }
    }
}



回答3:


Try this ...

Results:

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

import java.util.*;
  public class HelloWorld{

 static int binCoeff(int n, int k) {
     int res = 1;
    if (k > n - k)
    k = n - k;
    for (int i = 0; i < k; ++i)
    {
        res *= (n - i);
        res /= (i + 1);
    }

    return res;
}

static void pascalTriangle(int lines) {
    for(int i = 0;i < lines; i++) {
        for(int j = 0; j<=i; j++)
         System.out.print(HelloWorld.binCoeff(i, j) + "  ");
         System.out.println();
    }
}

 public static void main(String []args) {
    System.out.println("Results: ");
    HelloWorld.pascalTriangle(8);
 }
 }



回答4:


   class pascal
     {
       static void main(int n)
        {
          int a[][]=new int[n][n+1];
           for(int i=0;i<n;i++) 
           {
            for(int j=0;j<n;j++)
            {               
              a[i][j]=0;
            }
         }
    a[0][1]=1;
    int k=5;int p=0;
    for(int i=1;i<n;i++)
    {
        for(int j=1;j<n+1;j++)
        {
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(int i=0;i<a.length;i++)
    {
        for(p=n+-i;p>0;p--)
        {
            System.out.print(" ");
        }
        for(int j=0;j<a[i].length;j++)
        {
            if(a[i][j]!=0)
            {
                System.out.print(a[i][j]+" ");
            }
            else 
            {
                System.out.print(" ");
            }              
        }
        System.out.println();
    }
  }
}


来源:https://stackoverflow.com/questions/18938928/pascal-triangle-positioning

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!