Java编程实现帕斯卡三角形代码示例
作者:tea_year 发布时间:2023-11-02 08:08:24
源程序揭秘
杨辉三角形性质:
每行数字左右对称,由 1 开始逐渐变大,然后变小,回到 1。
第 n 行的数字个数为 n 个。
第 n 行数字和为 2^(n-1) 。
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角形。
第 n 行的第 1 个数为 1,第二个数为 1× (n-1) ,第三个数为 1× (n-1) × ( n-2) /2,第四个数为
1× (n-1) × (n-2) /2× (n-3) /3…依此类推。
算法原理1:
使用一个二维数组 yh[][] 存储杨辉三角形的数据,行和列的大小为所需要输出的行数 Row(本程
序中 Row 为 10)。
使用 for 循环使杨辉三角中除了最外层(不包括杨辉三角底边)的数为 1 ;
使用语句 yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j] 使第 i 行第 j 列的数据等于第(i-1) 行
第(j-1)列的数据与第(i-1)行第(j)列的数据之和,即每个数字等于上一行的左右两个数字之和。
package com.work;
public class YangHuiSanJiao
{
public static void main(String[] args) {
int [][]a = new int [10][10];
for(int n = 0; n < 10;n++)
{
a[n][0] = 1;
a[n][n] = 1;
}
for(int n = 2; n <10; n++)
{
for(int j = 1; j < n; j++)
{
a[n][j] = a[n -1][j -1] + a[n - 1][j];
}
}
for(int n = 0; n < 10; n++)
{
for(int k = 0; k < 2 * (10 - n) - 1; k++)
{
System.out.print(" ");
}
for(int j = 0; j <= n; j++)
{
System. out.print(a[n][j] + " ");
}
System.out.println();
}
}
}
方式二
package com.face;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
printYFTriangle();
}
<pre code_snippet_id="2474965" snippet_file_name="blog_20170708_2_9005712" class="prettyprint" name="code"><code class="hljs java has-numbering"><span class="hljs-javadoc">/**
* 1 要理解下面的实现,首先要明白int数组中元素默认值为 0
* 2 然后每一次迭代打印新的一行的元素的时候:
* 新的特定位置的元素 = 该位置原来的元素 + 该位置的前一个位置的值
*/</span></code></pre>public static void printYFTriangle(){ System.out.println("杨辉三角,您准备输出的行数:"); Scanner input = new Scanner(System.in); int lines = input.nextInt();//获得循环的行数; int[] a = new int[lines + 1];//临时存储数据用; int previous = 1; //默认第一个数; for (int i = 1; i <= lines; i ++){//i 用来控制行数; for(int j=1;j<=lines-i;j++){//输出空格,很easy; System.out.print(" "); } for (int j = 1; j <= i; j++){ int current = a[j];//先获得后一个数, a[j] = previous + current; previous = current; System.out.print(a[j] + " "); } System.out.println(); }}}
方法三:递归实现
package com.face;
import java.util.Scanner;
public class DiGui {
static int fun(int n,int k){
//n,行,k:列
if(k==1||n==k)
return 1;
else
return fun(n-1,k-1)+fun(n-1,k);
}
public static void main(String[] args) {
int lines;
System.out.println("请输入行数:");
Scanner input=new Scanner(System.in);
lines=input.nextInt();
for(int i=1;i<=lines;i++){
for(int k=1;k<lines-i+1;k++){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print(fun(i,j)+" ");
}
System.out.println();
}
}
}
请输入行数:
6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
再分享一个实例:
/**
* 打印杨辉三角形(帕斯卡三角形),打印10行
*
*/
public class Yanghuisanjiao {
public static void main(String[] args) {
int [][] a = new int[11][11];
for (int i = 0 ; i < 10 ; i++) {
a[i][0] = 1;
a[i][i] = 1;
}
for (int i = 1 ; i < 10 ; i ++) {
for (int j = 1; j < i ; j++) {
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for (int i = 0; i < 10 ; i++) {
for (int j = 0; j < 10-i;j++) {
System.out.print(" ");
}
for (int k = 0; k < 10;k++) {
if (a[i][k] != 0) {
System.out.print(a[i][k]+" ");
}
}
System.out.println();
}
}
}
结果:
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
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
来源:http://blog.csdn.net/zhangchen124/article/details/74840688
猜你喜欢
- 什么是OKHttp一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进
- 如下所示:package cn.sunzn.md5;import java.security.MessageDigest;import ja
- pom.xml配置<dependency> <groupId>org.springframework.
- 最近的项目中要实现一个聊天的功能,类似于斗鱼TV的聊天室功能,与服务器端人商量后决定用WebSocket来做,但是在这之前我只知道Socke
- 前言这几天同事跟我在升级Android target SDK和build tool版本的时候,碰到了一个非常搞笑的问题,基本可以算作是“坑”
- 最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启
- 本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及final关键字对初始化的影响。另外,还讨论了由于继承原因,
- throw抛出异常的方式比较直接:if(age < 0){throw new MyException("年龄不能为负数!&q
- Android自带的跑马灯效果不太好控制,还必须要满足条件才能有效果,而且速度不受控制。前面我的博客中有一篇就是用Android自带的跑马灯
- 前言上一篇我们介绍了使用 sqflite 这个数据库工具在 Flutter 的应用中建立本地数据库的实例应用。了解过数据库的同学应该会知道,
- 前言对于数组遍历,基本上每个开发者都写过,遍历本身没什么好说的,但是当我们在遍历的过程中,有一些复杂的业务逻辑时,将会发现代码的层级会逐渐加
- 前言古语有云:道为术之灵,术为道之体;以道统术,以术得道。其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是
- Android application捕获崩溃异常怎么办?通用 application1、收集所有 avtivity 用于彻底退出应用2、捕
- Java实现PC微信扫码支付做一个电商网站支付功能必不可少,那我们今天就来盘一盘微信支付。微信支付官方网站业务流程:开发指引文档支付服务开发
- 在导入studio工程的时候,进行sync的时候,提示Error:Configuration with name 'default&
- 动态内存管理为什么存在动态内存分配我们到现在为止掌握的是什么样的内存开辟方式呢//创建一个变量int val = 20; &n
- Lambda 表达式Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性
- 1: .net framework 由两个部分组成:CLR 和 FCL。2:在CLR中,所有错误都是通过异常来报告的。3:智能感知功能主要是
- 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java
- MultiFrameImageStreamCompleterMultiFrameImageStreamCompleter 是一个可组合的 I