我试图在java中绘制pascal三角形
这是我的代码
static void printPascalTriangle(int length){
int[][] pascal=new int[length][length];
for (int i = 0; i < length; i++) {
pascal[0][i]=1;
pascal[i][0]=1;
} // here length is the dimension of pascal triangle , first loop is for filling up the first row and column with zero
for (int row = 1; row < length; row++) {
for (int column = 1; column < length-row; column++) {
pascal[row][column]=pascal[row][column-1]+pascal[row-1][column];
}
} // this loop is for filling up the rest of position
for (int row = 0; row < length; row++) {
for (int column = 0; column < length-row; column++) {
pr(pascal[row][column]+"\t");
}
prln("\n");
} // this loop is for printing the array
}
static void prln(Object anyObject){
System.out.println(anyObject);
}
static void pr(Object anyObject){
System.out.print(anyObject);
}
我在这里使用了三个循环,如何通过使用单个循环或至少两个循环来解决这个问题,我不想使用不同的循环来打印数组。
答案 0 :(得分:1)
使用this formula我们得到算法:
// for each row
for (int row = 0; row < length; row++) {
// the value of the previous column in this row
// it doesn't really matter what we initialize this to
// since we never use the initial value anyway
int previous = 1;
// for each column in this row
// row 0 has 1 column and each subsequent row has one more
for (int column = 0; column <= row; column++) {
// the value of the current column in the row
// the default value is 1, since that is always the value
// of the first column in every row
int current = 1;
// if the current column isn't the first, use formula
// from the wikipedia article to compute the current column
if (column != 0) {
// we cast 'column' to a double so that the decimal does not get
// truncated during division
current = (int) (previous * ((row + 1 - column) / (double) column));
}
// print out the current column followed by a space
System.out.print(current + " ");
// set the value of the previous column to the current column value
// this will be used in the next iteration of this for loop
previous = current;
}
// print a new line to start a new row
System.out.println();
}