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


猜你喜欢
- 在实现下拉框的基础上进行二级联动(这个项目有bug添加可以完成,但是修改获取不到对应的值,这个问题解决以后我会在发布一篇文章)JS部分//二
- 1. 什么是 spring-boot-devtoolsspring-boot-devtools 是 spring-boot项目开发时的一个热
- CircleImageView实现圆形头像代码分享,供大家参考,具体内容如下一、创建属性文件(attrs.xml)具体操作:1、在项目的va
- Unity 跑马灯抽奖效果实现代码,供大家参考,具体内容如下这边用到插件是NGUI+Dotween,思路简单说下:先排版,通过移动图片蒙版来
- 最近单位又有一个新Java项目。涉及到扫码登录。之前项目使用的是 ajax轮询的方式。感觉太low了。所以这次用webSocket的方式进行
- 本文实例讲述了C#实现判断当前操作用户管理角色的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>///
- 本文为大家分享了Android自动检测版本及自动升级的具体代码,供大家参考,具体内容如下步骤:1.检测当前版本的信息AndroidManif
- 前言本文给大家分享一个使用Android开发写字板功能Dem、简单操作内存中的图像、对图像进行简单的处理、绘制直线、以达到写字板的效果效果图
- 本文实例为大家分享了C#实现数字华容道游戏的具体代码,供大家参考,具体内容如下代码如下:using System;using System.
- 虽然闭包主要是函数式编程的玩意儿,而C#的最主要特征是面向对象,但是利用委托或lambda表达式,C#也可以写出具有函数式编程风味的代码。同
- 当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得。如果当前单
- 前言定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类在简单工厂模式中用于被创建实例的方法通常为静态(s
- 克隆方法是原型设计模式中必须使用的方式,它将返回一个与当前对象数据一致的对象。正如其名,犹如一个模子雕刻而出。克隆类型分为两种:浅克隆、深克
- SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理微信小程序的接口验证防止非法请求,登录的时候获取openId生
- 一、TimeZone 简介TimeZone 表示时区偏移量,也可以计算夏令时。在操作 Date, Calendar等表示日期/时间的对象时,
- 一、问题定义:问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数??例如:权重: 8 2&nbs
- 1.)添加引用 build.gradle 中添加配置 compile 'com.github.bumptech.glid
- 其实写到这里,我已经差不多断气了。。。常规套路,这里是前三篇的传送门,需要的同学可以看一下:JAVA写文本编辑器(三) JAVA写文本编辑器
- yaml介绍YAML(YAML Ain't Markup Language),一种数据序列化格式优点:容易阅读容易与脚本语言交互以数
- windows下使用cmd命令提示符生成java webservice客户端代码,可以使用命令提示符直接生成客户端代码,直接导入到项目中,只