思路:1:总结出数字规律
第n行第一列和第n列总是为1
第n行r列的数为第(n-1)行r列+(n-1)行(r-1)列
2:总结出打印在输出上的格式
过程中的错误想法:引用排列组合函数C(n,r),还需分情况考虑,太过繁琐
package com.suanfa.test;
import java.util.Scanner;
//巴斯卡三角形
public class Pascal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 1; i <=n; i++) {
for (int j = 1; j <n-i+1; j++) {
System.out.print("#");//第i行的前n+i-1列打印为空格(此处为#)
}
for (int j = 1; j <=i; j++) {
System.out.print(pascal(i,j)+" ");
}
System.out.println();
}
}
//返回杨辉三角数列
public static int pascal(int n,int r) {
if (r==1||n==r) {
return 1;
}
else
return pascal(n-1,r)+pascal(n-1,r-1);
}
}
排列组合函数方式:
package com.suanfa.test;
import java.util.Scanner;
//巴斯卡三角形
public class Pascal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 1; i <=n; i++) {
for (int j = 1; j <n-i+1; j++) {
System.out.print("#");
}
// for (int j = 1; j <=i; j++) {
// System.out.print(pascal(i,j)+" ");
// }
for (int j = 1; j <=i; j++) {
if (j==1||j==i) {
System.out.print(1+" ");
}
if (i>2&j>1&j<i) { //条件易出错
System.out.print(C(i-1,j-1)+" ");
}
}
System.out.println();
}
}
//累乘
public static long N(int n) {
long num=1;
while (n>1) {
num=num*n--;
}
return num;
}
//排列数公式
public static long A(int n,int r) {
long num=1;
return N(n)/N(n-r);
}
//组合数公式
public static long C(int n,int r) {
long num = 1;
return A(n,r)/N(r);
}
//返回杨辉三角数列
public static int pascal(int n,int r) {
if (r==1||n==r) {
return 1;
}
else
return pascal(n-1,r)+pascal(n-1,r-1);
}
}