`
dingjun1
  • 浏览: 211871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

杨辉三角-----JAVA实现方式

阅读更多
/**
 * 杨辉三角算法之一
 * 使用一维数组进行计算
 * @author Administrator
 *
 */
import java.util.*;
public class Triangle {
	/*	a:第K行第一个数的下标值
	 *  m:第K+1行第一个数的下标值
	 *  b:第K行最后一个数的下标值
	 *  n:第K+1行最后一个数的下标值
	 *  
	 *  规律为除两侧的元素均为1以外,其余每个位置上数值都等于其左上角元素与右上角元素之和
	 *  第K行有K个数
	 *  array[m+1]=array[a]+array[a+1];
	 *  array[m+2]=array[a+1]+array[a+2];
	 *  即:
	 *  array[m+t+1]=array[a+t]+array[a+t+1];
	 *  t从零开始,t应该小于等于K-2(保证a+k-2+1=b);
	 *  
	 * 
	 *  由题已知:
	 * 	array[a]=1;
	 *  array[b]=1;
	 *  array[m]=1;
	 *  array[n]=1;
	 *  b-a=k-1;
	 *  m=b+1;
	 *  n-m=k;
	 */
	
	
	//int k;//行号
	
	
	//List list = new ArrayList((k+1)*k/2);//初始化大小
	
	public final static String SEPARATOR=" ";
	public final static String SEPARATOR_NUM=" ";
	public final static int LEN=6;
	public final static int SEPARATOR_LEN=3;
	public StringBuffer init(int k){

		int a,b,m,n;//下标
		int arr[] = new int[(k+1)*k/2];//初始化大小
		StringBuffer sb = new StringBuffer();
		
		//打印第一行
		if(k>0){
			sb.append(numSeparator(k).toString());
			
			sb.append(toStr(1,LEN));//此行第一个数
		}
		
		
		for(int L=1;L<k;L++){//行号循环
			a = ((L-1)+1)*(L-1)/2;//第l行的第一个数的下标值
			b = a+L-1;
			m = b+1;
			n = m+L;
			arr[a]=1;
			arr[b]=1;
			arr[m]=1;
			arr[n]=1;
			
			sb.append("\n");//新启一行
			
			//距离最左边占位符
			sb.append(numSeparator(k-L).toString());
			
			
			sb.append(toStr(arr[m],LEN)+separatorStr());//此行第一个数
			
			
			for(int t=0;t<=L-2;t++){//计算中间的值
				arr[m+t+1]=arr[a+t]+arr[a+t+1];
				sb.append(toStr(arr[m+t+1],LEN)+separatorStr());
			}
			
			sb.append(toStr(arr[n],LEN));//此行最后一个数
			
		}


		return sb;
		
	}
	
	/**
	 * 设定数字的长度为len
	 * 不足长度的以空格补齐
	 * @param x
	 * @param len
	 * @return
	 */
	public String toStr(int x,int len){
		StringBuffer sb = new StringBuffer("");
		String str = String.valueOf(x);
		if(str.length()<len){
			int i = len-str.length();
			for(int k=0;k<i/2;k++){
				sb.append(Triangle.SEPARATOR_NUM);
			}
			sb.append(str);
			for(int k=i/2;k<i;k++){
				sb.append(Triangle.SEPARATOR_NUM);
			}
		}else{
			sb.append(str);
		}
		
		return sb.toString();
	}
	
	/**
	 * //两个数字之间占位符长度的一半
	 * @return
	 */
	public String separatorStr(){
		StringBuffer sb = new StringBuffer("");
		for(int p=0;p<SEPARATOR_LEN;p++){//两个数字之间占位符长度的一半
			sb.append(SEPARATOR);
		}
		return sb.toString();
	}
	
	/**
	 * (总行数-行数序号(从一开始))*两个数字之间占位长度/2
	 * k行距离左边的占位符数
	 * @param k
	 * @return
	 */
	public String numSeparator(int k){
		
		StringBuffer sb = new StringBuffer("");
		for(int j=0;j<k-1;j++){
			for(int p=0;p<SEPARATOR_LEN/2;p++){//两个数字之间占位符长度的一半
				sb.append(SEPARATOR);
			}
			
			for(int p=0;p<=LEN/2;p++){//预设数字本身长度的一半
				sb.append(SEPARATOR_NUM);
			}
				
		}
		return sb.toString();
	}
	
	
	public static void main(String[] arr){
		
		int k=20;
		if(arr.length>=1){
			try{
				k=Integer.parseInt(arr[0]);
			}catch(NumberFormatException e){
				System.out.print(e.getMessage());
			}
		}
		
		Triangle t = new Triangle();
		
		System.out.print(t.init(k).toString());		
	}

}

  • 描述: 运行结果图
  • 大小: 497.3 KB
分享到:
评论

相关推荐

    杨辉三角-java编写

    以下将详细讲解杨辉三角的原理、Java实现方式以及相关知识点。 **一、杨辉三角的基本原理** 杨辉三角是一个二维的数阵,每一行的数字是上一行相邻两个数字之和。它的每一行都代表二项式系数,即组合数。例如,第n...

    杨辉三角--Java

    在Java编程中,我们可以使用数组来实现杨辉三角的打印。下面将详细解释如何利用Java实现杨辉三角的输出,并介绍其中涉及的关键知识点。 首先,杨辉三角每一行的数字可以由上一行的相邻两个数字相加得到,其形状如下...

    杨辉三角--java文件

    根据使用者的输入决定杨辉三角的行数 本三角为正三角

    java实验-杨辉三角-水仙花数

    java实验-杨辉三角-水仙花数 实现功能: 在控制台上显示求出所有的水仙花数; 控制台上打印出杨辉三角; 内容: 报告+源码 仅供参考,共勉。有什么问题可以私聊博主,本项目适合计算机专业的在校学生下载学习。

    杨辉三角.java用java实现杨辉三角的程序

    java实现杨辉三角 杨辉三角.java用java实现杨辉三角的程序

    用java打印杨辉三角

    理解并能熟练运用杨辉三角的原理和实现方式,对于提升编程能力和解决复杂问题有着重要的作用。 此外,这个练习也帮助开发者熟悉Java的数组操作、循环控制以及方法的编写,这些都是编程基础中的重要组成部分。通过...

    java实现杨辉三角形

    Java实现杨辉三角形是一种常见的编程练习,它涉及到数组、循环和递归等基础编程概念。杨辉三角形,又称为帕斯卡三角形,是中国古代数学家杨辉提出的一种几何排列形式,它在组合数学中有着重要的地位,因为其行中的...

    Java SE程序 杨辉三角

    Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角Java SE程序 杨辉三角...

    基于java实现杨辉三角

    **Java实现杨辉三角**主要是通过编程来生成和显示这个几何形状。以下是实现的基本步骤: 1. **初始化二维数组**:杨辉三角的每一行都是一个等差数列,因此可以用二维数组来存储。数组的第一行和最后一行都是1,中间...

    用java实现杨辉三角

    杨辉三角,又称帕斯卡三角,是一种在数学中广泛使用的二维数字模式,它展示了二项式系数的规律。在每一行中,每个数字是它上面两个数字的和,而边缘的数字始终为1。杨辉三角在组合数学、概率论、计算机科学等多个...

    java实现等腰输出杨辉三角

    在Java中实现等腰杨辉三角,我们需要编写一个程序,允许用户输入他们想要输出的行数,然后根据输入的行数生成相应的杨辉三角形。以下是实现这个功能的关键步骤: 1. **用户输入**:首先,程序需要获取用户的输入,...

    java实现杨辉三角显示

    在Java中,我们可以使用二项式定理来计算这些组合数,从而实现杨辉三角的显示。 二项式定理指出,任何幂次为n的二项式展开(a + b)^n 的每一项都是由一个组合数C(n, k)乘以a的k次方与b的(n-k)次方组成的,其中k从0...

    java杨辉三角算法实现

    洋哥刚写出来的新鲜代码,通过java中for循环与两个数组的调用,实现杨辉三角算法,供大家分享交流

    Java编写杨辉三角代码

    Java编程实现杨辉三角是一种经典的算法问题,它与组合数学紧密相关,经常出现在计算机科学的基础教学中。杨辉三角,又称帕斯卡三角,是一个二维的数字数组,每一行的数字构成一个等差数列,且每行的两端都是1,中间...

    Java 实现杨辉三角

    通过实现 杨辉三角 ,来体验 一下数组的魅力! 让你喜欢上数组!

    杨辉三角算法杨辉三角算法

    本文将从杨辉三角的基本概念出发,结合具体的Java代码示例,深入探讨其算法实现及应用场景。 #### 二、杨辉三角基本概念 **杨辉三角**(Yanghui Triangle)是中国古代数学家杨辉发现的一种特殊排列方式,其实质是...

    Java语言实现杨辉三角

    用Java语言实现杨辉三角程序 import java.util.Scanner; public class YH3J { public static void main(String[] args) { Scanner sca = new Scanner(System.in); System.out.print("输入层数:"); int n = ...

    java编程杨辉三角

    在Java中实现杨辉三角,我们可以用多种方法,包括使用二维数组和递归。 1. **二维数组实现**:创建一个二维数组,数组的每一行代表杨辉三角的一行,数组的每个元素代表该位置上的数字。初始化第一行和第二行,然后...

    java杨辉三角

    Java实现杨辉三角是一种常见的编程练习,它涉及到数组、循环和递归等基本概念。杨辉三角,又称帕斯卡三角,是数学中一个有趣的二维数列结构,它在组合数学、概率论以及计算机科学中都有广泛的应用。下面将详细阐述...

Global site tag (gtag.js) - Google Analytics