参考网页编程网

问题描述

输入:打印的行数。

输出:对应行数的杨辉三角。

思路分析


杨辉三角示例:

1
2
3
4
5
6
7
      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

假设需要打印的行数是row ,num(i,j)代表第i行第j个数。

通过分析不难得知:

  • 第i行要打印的空格数量为row-i
  • 第i行要打印i个数字,每行第一个和最后一个(第i个都是1)
  • 当num(i,j)不是1时, num(i,j)=num(i-1,j)+num(i-1,j-1)即该数字等于上一行同一位置数字(都是第对应行第j个数字)和上一行前一个数字之和。

首先定义num用来方法确定每一个值

1
2
3
4
5
6
7
8
9
public static int num(int a,int b) {   //a,b代表第a行,第b个数
if(b==1||b==a) {
return 1;

}
int c=num(a-1,b-1)+num(a-1,b);
return c;

}

定义calu方法输出杨辉三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void calu(int row) {
for (int i=1;i<=row;i++) { //i代表行
for(int j=1;j<=row-i;j++) { //j代表列
System.out.print(" "); //输出每一行的空格
}
for(int j=1;j<=i;j++) {
System.out.print(num(i,j)+" "); //输出每一行的数字
}
System.out.println();
}


}

main方法

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {

Scanner s=new Scanner(System.in); //使用类时要先导入模块: import java。util.*;
System.out.print("请输入打印的行数:");
int x=s.nextInt();
calu(x);
s.close();

}

代码


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package test1;
import java.util.*;

public class test1{
//num方法
public static int num(int a,int b) {
if(b==1||b==a) {
return 1;

}
int c=num(a-1,b-1)+num(a-1,b);
return c;

}
//calu方法
public static void calu(int row) {
for (int i=1;i<=row;i++) {
for(int j=1;j<=row-i;j++) {
System.out.print(" ");
}
for(int j=1;j<=i;j++) {
System.out.print(num(i,j)+" ");
}
System.out.println();
}


}

public static void main(String[] args) {

Scanner s=new Scanner(System.in);
System.out.print("请输入打印的行数:");
int x=s.nextInt();
calu(x);
s.close();



}

}

结果示例

输出