【编程马拉松算法目录>>>】


【010-杨辉三角】【工程下载>>>】


1 题目描述


  1
  1 1
  1 2 1
  1 3 3 1
  1 4 6 4 1
  1 5 10 10 5 1
  上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。

1.1 输入描述:


  输入数据包含多组测试数据。
  每组测试数据的输入只有一个正整数n(1≤n≤128),表示将要输出的杨辉三角的层数。
  输入以0结束

1.2 输出描述:


  对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

1.3 输入例子:


2
3
0

1.4 输出例子:


1
1 11
1 1
1 2 1

2 解题思路


2.1解法一


  假设杨辉三角的使用一个二维数组a进行表示。a[i][j]表示第i+1行第j+1列元素的值,有公式:

a[i][j]={1a[i−1][j−1]+a[i−1][j]j=0 or j=i0<j<i

a[i][j]=\begin{cases} 1&j=0 or j=i\\ a[i-1][j-1]+a[i-1][j]&0

2.2解法二


  将杨辉三角使用一个一维数组a表示,从下标0开始,杨辉三角第i行第j列个元素对应用到数组a的下标为x(i,j):则

x(i,j)=(∑k=1i−1k)+j−1 (j≥1 and i≥j)

x(i,j)=\left ( \sum_{k=1}^{i-1}k \right )+j-1 (j≥1 and i≥j)

x(i,j)=i(i−1)2+j−1

x(i,j)=\frac{i(i-1)}{2}+j-1

  得

a[x(i,j)]={1a[x(i−1,j−1)][x(i−1,j)]j=1 or j=i1<j<i

a[x(i,j)]= \begin{cases} 1&j=1 or j=i\\ a[x(i-1,j-1)][x(i-1,j)]&1

3 算法实现

import java.math.BigInteger;
import java.util.Scanner;/*** Author: 王俊超* Time: 2016-05-09 10:53* CSDN: http://blog.csdn.net/derrantcm* Github: https://github.com/Wang-Jun-Chao* Declaration: All Rights Reserved !!!*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));while (scanner.hasNext()) {int num = scanner.nextInt();if (num == 0) {break;}System.out.println(triangle2(num));}scanner.close();}/*** 【解法一】* 计算杨辉三角** @param n 杨辉三角的行数* @return 杨辉三角*/private static String triangle(int n) {if (n < 1) {throw new IllegalArgumentException("参数必须是正整数");}if (n == 1) {return "1\n";} else if (n == 2) {return "1\n1 1\n";}StringBuilder b = new StringBuilder();BigInteger[][] t = new BigInteger[n][n];for (int i = 0; i < t.length; i++) {t[i] = new BigInteger[n];}for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {if (j == 0 || i == j) {t[i][j] = new BigInteger("1");} else {t[i][j] = t[i - 1][j - 1].add(t[i - 1][j]);}b.append(t[i][j]).append(' ');}b.setCharAt(b.length() - 1, '\n');}return b.toString();}/*** 【解法二】* 计算杨辉三角** @param n 杨辉三角的行数* @return 杨辉三角*/private static String triangle2(int n) {if (n < 1) {throw new IllegalArgumentException("参数必须是正整数");}BigInteger[] t = new BigInteger[n * (n + 1) / 2];StringBuilder b = new StringBuilder();for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {// 第i行第一个元素的下标是: (i - 1) * i / 2// 第i行第j个元素的下标是:(i - 1) * i / 2 + j - 1int idx = (i - 1) * i / 2 + j - 1;if (j == 1 || i == j) {t[idx] = BigInteger.ONE;} else {// 第i-1行第一个元素的下标是: (i - 2) * (i - 1) / 2int x = (i - 2) * (i - 1) / 2 + j - 1;int y = (i - 2) * (i - 1) / 2 + j - 2;t[idx] = t[x].add(t[y]);}b.append(t[idx].toString()).append(' ');}b.setCharAt(b.length() - 1, '\n');}return b.toString();}
}

4 测试结果


5 其它信息


因为markddow不好编辑,因此将文档的图片上传以供阅读。Pdf和Word文档可以在Github上进行【下载>>>】。

【编程马拉松】【010-杨辉三角】相关推荐

  1. php中怎样输出杨辉三角,php趣味编程 - php 打印杨辉三角

    php趣味编程 - php 打印杨辉三角 /* 打印杨辉三角 1 1 1 1 2 1 1 3 3  1 1 4 6  4  1 1 5 10 10 1 $i 来代表行数 $j 来代表一行第几个数 数组 ...

  2. 用c语言编程写出杨辉三角,用C语言编写杨辉三角

    今天给大家带来用C语言在屏幕上输出杨辉三角 杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路:主要用到循环和数组的知识,今天就以for循环为例,给大家输出10行的杨辉三角. ...

  3. c语言编程杨辉三角前八行思路,C语言----(杨辉三角)

    用C语言编程打印出杨辉三角的前10行.如下图所示: 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: ...

  4. [C语言][典例详解]打印杨辉三角(找规律简单实现)

    目录 杨辉三角的相关知识 杨辉三角图: 杨辉三角的规律 在编程中实现 第一步 :我们先实现数字的打印,后面再加上空格构成三角形形状: ​编辑 1.首先我们可以直观的看出三角形的两个斜边都是1:所以我们 ...

  5. 求杨辉三角的前n行数据_它是高考热点,代表数学之美,还是编程狗的最爱——杨辉三角...

    要问中国在哪些方面领先世界数百年,数学界的杨辉三角一定要拥有姓名. 就是这个看上去平平无奇的数字三角形,却有一些非常奇妙甚至是神秘的特性: 最外层的数字始终是 1: 第二层是自然数列: 第三层是三角数 ...

  6. 杨辉三角金字塔c语言编程,scratch编程绘制数字金字塔(杨辉三角)

    杨辉三角相信很多人都不陌生,它是一个无限对称的数字金字塔,在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623--1662)在1654年发现这一规律,所 ...

  7. python杨辉三角_学点数学和编程终身受益:看看杨辉三角形

    他叫杨辉,长啥模样无所谓,反正古代人都是当官的样儿 一个叫杨辉的人,中国南宋末年的数学家.数学教育家.大约在13实际中叶至后半叶活动于苏杭一带.虽然他的生卒年和生平无从详考,但是,他确实是我们中国古代 ...

  8. 杨辉三角c语言编程报告,C语言打印杨辉三角示例汇总

    杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...

  9. c语言编程规律数阵输出,趣味C程序100.9 绘制杨辉三角

    说明:1.本问题来源于,所有程序为本人自己编写.与原程序不同之处作有标记. 2.本系列所有程序均使用codeblocks编译,操作系统为Windows XP. 问题:在屏幕上显示杨辉三角 1 1  1 ...

  10. python杨辉三角编程_Python基础练习实例49(打印杨辉三角)

    杨辉三角(也称帕斯卡三角),它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和. 题目:打印出杨辉三角形(要求打印出10行如下图). 分析: 把每一行看作一个列 ...

最新文章

  1. 吴恩达演讲直指AI落地三大挑战,并提出解决方案(附视频)
  2. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
  3. Python可视化中Matplotlib(3.线条的详细样式及线性、保存图片、plot的详细风格和样式)、背景色、点和线的详细设置
  4. Kubernetes用户指南(二)--部署组合型的应用、连接应用到网络中
  5. JS判断当前使用的是哪个浏览器及其版本
  6. double类型计算
  7. 汉诺塔V - ACM解决方法
  8. php stream encoding,PHP之mb_check_encoding使用方法分享
  9. protocol buffer 对socket协议封装成二进制传输
  10. ButterKnife View 注入
  11. python二元一次方程组用鸡兔同笼的思路来写编程_应用二元一次方程组——鸡兔同笼 教学设计...
  12. 青年与计算机比赛,我市首届青少年电脑机器人竞赛精彩上演
  13. 微信小程序实现动态时间滚动
  14. Python生成requirement.txt文件
  15. WEB网站设计用户登录的安全机制
  16. zabbix 自动发现/自定义宏
  17. k8s/Kubernetes集群安装
  18. php+ajax实现分页
  19. LMDI 理论推导详解【从理论到Python-MATLAB实现(理论)】
  20. 拉钩网前端项目实战04

热门文章

  1. EMQX Operator 如何快速创建弹性伸缩的 MQTT 集群
  2. [免费专栏] Android安全之ZIP文件目录遍历漏洞
  3. CCF2020122-期末预测之最_佳阈值
  4. 最小公倍数 php,PHP编程求最大公约数与最小公倍数的方法示例
  5. VS新建项目时出现 异常来自 HRESULT:0x80041FE2
  6. Unity的TextMeshPro使用概览
  7. 如何看待”很多人不读书一样当老板挣大钱”的说法?
  8. 人工智能A7论坛2017年迄今最新人工智能资源盘点
  9. AdaBoost算法详解及python实现【Python机器学习系列(十八)】
  10. 生成了文件却还是报错 Error:CreateProcess failed