要求:根据输入行数,打印出杨辉三角,这里我们实现两种杨辉三角:直角三角形和等腰三角形的杨辉三角,如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
问题分析:无论是哪一种杨辉三角,下面的数字都是等于该数字上面两个数字之和。我们采用二维数组来保存数据,其他地方用空格表示或者不输出。
直角三角形
代码分析:
import java.util.Scanner;
public class _3YanghuiTriangle {
//打印数组的方法,因为我们只输出数组的一半,即下三角部分,所以列遍历的时候取值小于等于行数
public static void printArray(int[][] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<=i;j++){
System.out.printf(" %3d",arr[i][j]);
}
System.out.println();
}
}
//获得杨辉三角的方法
public static int[][] getTriangle(int num){
int[][] arr=new int[num][num];
//赋值操作,每一行第一个数据和对角线处的数据都为1
for(int i=0;i<arr.length;i++){
arr[i][0]=1;
arr[i][i]=1;
}
//除了竖边和斜边,其他位置的值等于它的上方数据和左上角数之和
for(int i=1;i<arr.length;i++){
for(int j=1;j<=i;j++){
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
return arr;
}
public static void main(String[] args) {
System.out.println("请输入行数");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[][] arr=getTriangle(n);
printArray(arr);
}
}
等腰三角形
代码分析:
import java.util.Scanner;
public class _3YanghuiTriangle2 {
public static void main(String[] args) {
System.out.println("请输入行号");
Scanner scanner=new Scanner(System.in);
//行数
int m=scanner.nextInt();
//列数:根据杨辉三角图形很容易得出行数和列数的关系,即列数等于二倍行数-1
int n=2*m-1;
int[][] arr=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
//没有值的位置为空格,找出这些关系
if((j<m-i-1)||(j>=m+i)){
System.out.print(" ");
}
//赋值为1的位置
else if((j==m-i-1)||(j==m+i-1)){
arr[i][j]=1;
System.out.printf("%3d",arr[i][j]);
}
//赋值空格
else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1){
System.out.print(" ");
}
//输出中间数字
else {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
System.out.printf("%3d",arr[i][j]);
}
}
System.out.println();
}
}
}
完整代码
1.
import java.util.Scanner;
public class _3YanghuiTriangle {
public static void printArray(int[][] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<=i;j++){
System.out.printf(" %3d",arr[i][j]);
}
System.out.println();
}
}
public static int[][] getTriangle(int num){
int[][] arr=new int[num][num];
for(int i=0;i<arr.length;i++){
arr[i][0]=1;
arr[i][i]=1;
}
for(int i=1;i<arr.length;i++){
for(int j=1;j<=i;j++){
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
return arr;
}
public static void main(String[] args) {
System.out.println("请输入行数");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[][] arr=getTriangle(n);
printArray(arr);
}
}
2.
import java.util.Scanner;
public class _3YanghuiTriangle2 {
public static void main(String[] args) {
System.out.println("请输入行号");
Scanner scanner=new Scanner(System.in);
int m=scanner.nextInt();
int n=2*m-1;
int[][] arr=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if((j<m-i-1)||(j>=m+i)){
System.out.print(" ");
}
else if((j==m-i-1)||(j==m+i-1)){
arr[i][j]=1;
System.out.printf("%3d",arr[i][j]);
}
else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1){
System.out.print(" ");
}
else {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
System.out.printf("%3d",arr[i][j]);
}
}
System.out.println();
}
}
}