java杨辉三角的实现

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

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 0e
setlocal enabledelayedexpansion
mode con: cols=130 lines=130
:top
cls
::set /p in=请输入行数:
set in=23&set ab=1&set var=64
if "%in%"=="" goto top
if %in% geq 35 goto top
if %in% leq 0 goto top
echo %in%|findstr /r "^[0-9][0-9]*$">nul 2>nul||goto top
set str=1
for /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
:lis
set max=%~1
for /l %%a in (0 1 300) do (
if not "!max:~%%a,1!"=="" set /a ci+=1
)
set /a ki=var-ci/2
for /l %%a in (1 1 !ki!) do set kg= !kg!
echo !kg!!max!
set nam!ab!=!kg!!max!
set /a ab+=1
set ci=0&set kg=
goto :eof




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心歌技术

打赏不能超过你的早餐钱!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值