参考网页编程网
问题描述
输入:打印的行数。
输出:对应行数的杨辉三角。
思路分析
杨辉三角示例:
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(); } }
|
结果示例