java杨辉三角的实现

来源:互联网 发布:淘宝满减怎么免费设置 编辑:程序博客网 时间:2024/06/05 05:46

根据输入行数,打印出杨辉三角形。

1.首先分析杨辉三角


两侧全部都是1,中间的数等于其上边两数之和。如果在二维数组中,则如下:


2.可以通过二维数组来处理方阵,一个双重循环就能实现,外循环控制行数,内循环控制列来完成方阵内数字的计算和存储。

程序编写 

a.首先编写出程序框架

import java.util.Scanner;public class First {public static void main(String[] args) {  System.out.print("请输入行数:");  Scanner scanner = new Scanner(System.in);   int num = scanner.nextInt();//键盘接收行数    int[][] arr = getTriangle(num);    //得到杨辉三角    print(arr);//打印杨辉三角}}

b.然后得到杨辉三角

由前面的问题分析可知,用二维数组计算存储杨辉三角,杨辉三角竖边、斜边都为1,可以先赋值,然后再给中间元素赋值,当前位置的值等于它的上方数和左上角上的数之和。

程序代码如下:

private static int[][] getTriangle(int num) {int[][] ary = new int[num][num];//用二维数组存储  for(int i = 0; i < ary.length; i++)//竖边、斜边置1{ary[i][0] = 1;ary[i][i] = 1;}  for(int i = 1; i < ary.length; i++)//外循环控制行数{for(int j = 1; j <= i; j++)//内循环控制列{//里面部分,等于当前位置的上方和左上角之和ary[i][j] = ary[i-1][j-1] + ary[i-1][j];}}return ary;}
c.打印杨辉三角

杨辉三角保存在二维数组中,通过一个双重循环就可以打印出来,但是要注意的是,不需要把所有元素都打印出来,内循环列的控制要小于等于当前行数。

程序代码如下:

private static void print(int[][] ary){for(int i=0;i<ary.length;i++)//外循环控制行{for(int j=0;j<=i;j++)//内循环控制列{System.out.printf(" %-3d", ary[i][j]);}System.out.println();//换行}}


格式化输出参考打印金字塔

附完整程序:

import java.util.*;public class First {    public static void main(String[] args)    {   Scanner in = new Scanner(System.in);//获取控制台输入对象   System.out.print("请输入行号: ");   int m = in.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)//中间默认数字0用空格替换   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();//输出换行   }   }}


bat版杨辉三角实现

@echo off&color 0esetlocal enabledelayedexpansionmode con: cols=130 lines=130:topcls::set /p in=请输入行数:set in=23&set ab=1&set var=64if "%in%"=="" goto topif %in% geq 35 goto topif %in% leq 0 goto topecho %in%|findstr /r "^[0-9][0-9]*$">nul 2>nul||goto topset str=1for /l %%i in (1,1,%in%) do (   set num=   set num2=0   for %%a in (!str!) do (   set /a num2+=1   if !num2!==1 set "str1="   set /a num1=%%a+num   set "str1=!str1! !num1!"   set num=%%a   )   call :lis "!str1:~1!"   set "str=!str1! 0")rem 再输出个倒 金字塔 玩玩。for /l %%a in (22 -1 1) do echo !nam%%a!for /l %%i in (1 1 3) do (  for %%a in (a b c d e f) do (  color 0%%a  ping/n 2 127.1>nul  ))exit:lisset max=%~1for /l %%a in (0 1 300) do (if not "!max:~%%a,1!"=="" set /a ci+=1)set /a ki=var-ci/2for /l %%a in (1 1 !ki!) do set kg= !kg!echo !kg!!max!set nam!ab!=!kg!!max!set /a ab+=1set ci=0&set kg=goto :eof