杨辉三角,也算是一个经典的题目了。就简单的说说。

写代码之前,先分析要做的东西的特点,找到规律,再把这个规律描述一下。

然后把这个描述翻译成编程语言,就可以说是编程了。

那么杨辉三角有什么特点?

首先是个三角,在数学里边,我们手写画出来,就像一个等腰三角形。

而在计算里边,打印个等腰三角形,还真不不太容易,好在三角的形状不是我们关注的重点,所以,我们这个三角形,是直角三角形,腰没了。

这个三角形有还有什么特点呢?

先是元素个数,这个有个特点,就是当前是第几行,那么这行就会有几列,比如,第一行,那么只有一列,第二行,就有两列,第三行有三列……

还有顶点(前两行)和两边,都是1,并且所有对称,每一行如果是一个字符串的话, 这就属于一个回文串。

那什么是回文串?可不是回族文字的字符串啊,是正读反读都是一样的字符串。比如:123454321,abcdedcba等等

那么再看看,还有其他特点么?

答案是肯定的,还有一个特点就是,从第三行开始,每行(除了第一个和最后一个)数字,都是上一行,同列的值加上上一行前一列的值的和

到这里,基本上就算是分析完了。理论上,我们把这些翻译成代码,这也就算写完了。

但是任何语言的翻译,都是要再修饰,太直白的翻译,硬!所以,后续根据情况,还要做些优化。

尝试写代码:

1、三角形(直角),其实就是一个长方形对角线的一半。可以理解成一个二维数组,一半有值,一半空。

const LINES int = 10;
var yh [LINES][LINES]int;

这样就定义了一个10行,10列的数组

矩阵有了,还要有坐标。因为要用循环来操作嘛,循环的时候,二维数组我们习惯用“i”和“j”来做下标,我们也顺便把两个变量看成坐标。i就是行,j就是列。

2、顶点(前两行)和两边都是1,从第三行开始,每行(除了第一个和最后一个)数字,都是上一行,同列的值加上上一行前一列的值的和

if i < 2 {//两行以内三角中的数字都是1
yh[i][j] = 1;
}else{//第三行开始,正式计算数值写入数组
if j == 0 || j == i {
yh[i][j] = 1;//所有行的第一列和最后一列都是1
}else{
yh[i][j] = yh[i-1][j-1] + yh[i-1][j];//当前数组元素是上一行的前一个元素加上上一行的当前列元素
}
}

上边,这段代码,同样是翻译了之前的一段描述,也就是杨辉三角的特点。到此为止,我们的代码关键部分基本完成了,还有哪里呢?

想想,哦~~还有个第几行,就是第几列。二维数组嘛,半个三角。那么如何写呢?

for i := 0; i < LINES; i++ {//LINE行
for j := 0; j < i + 1; j++ {//有几行,就有几列
//代码片段

}

以上代码,就是用到的循环。那么到这里,所有的代码翻译完成。这样就把这个杨辉三角完成了。

在循环过程中,可以输出数据,配合格式符,就是一个三角。

循环结束,数组的下标,就是杨辉三角的坐标,可以根据坐标,返回对应坐标的数字。

下边是完整代码:

package main;
import (
"fmt"
); const LINES int = 10;//设定杨辉三角10行,同时也相当于10列 func ShowYanghui(){
var yh [LINES][LINES]int;
for i := 0; i < LINES; i++ {
for j := 0; j < i + 1; j++ {
if i < 2 {//两行以内三角中的数字都是1
yh[i][j] = 1;
}else{//第三行开始,正式计算数值写入数组
if j == 0 || j == i {
yh[i][j] = 1;//所有行的第一列和最后一列都是1
}else{
yh[i][j] = yh[i-1][j-1] + yh[i-1][j];//当前数组元素是上一行的前一个元素加上上一行的当前列元素
}
}
fmt.Printf("%d\t", yh[i][j] );//格式化输出一行
}
fmt.Print("\n");//换行
}
} func main(){
ShowYanghui();
};

  

输出效果:

Golang实现杨辉三角的更多相关文章

  1. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  2. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  3. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  4. python生成器实现杨辉三角

    def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...

  5. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  6. HDNOIP201405杨辉三角

    2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1    1 1   2    1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...

  7. Java的二维数组的应用及杨辉三角的编写

    (1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...

  8. POJ3187Backward Digit Sums[杨辉三角]

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6350   Accepted: 36 ...

  9. 杨辉三角用java实现

    代码如下: public class ErArray { public static void main(String[] args) { //杨辉三角 int[][] num = new int[1 ...

随机推荐

  1. Serv-u 备份处理

    需求分析 从删库到跑路,大家听过很多,但如果没删备份的话,那只能说玩的不够彻底,不专业.系统管理员一个非常重要的职责就是定期备份,以便在系统出现故障的时候能够及时恢复.我们来看下如何备份Serv-u系 ...

  2. Excel带条件求和——SUMIF函数

    老婆求帮忙,问Excel中怎么跨Sheet带条件求和,就是关于sheet2中筛选出来的数据自动合计在sheet3中 . 比如有个sheet2表中的数据如下: 现在要在sheet3中求合计, 通过分析可 ...

  3. Tensorflow中神经网络的激活函数

    激励函数的目的是为了调节权重和误差. relu max(0,x) relu6 min(max(0,x),6) sigmoid 1/(1+exp(-x)) tanh ((exp(x)-exp(-x))/ ...

  4. SSO(singlesignon)单点登录

    技术实现机制: 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录:根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket ...

  5. 31、cookie小test

    请尽量使用JQuery进行代码编写,需求如下: 1.  页面初始化样式如图 2. 顶部input框中输入内容,按下回车enter键后,“正在进行” 列表中加入该条内容.   3. 顶部input框中输 ...

  6. _T宏的使用

    来源自百度.   他的作用是让你的程序支持Unicode编码, 因为Windows使用两种字符集ANSI和UNICODE, 前者就是通常使用的单字节方式, 但这种方式处理像中文这样的双字节字符不方便, ...

  7. AngularJS资源合集[备忘]【申明:来源于网络】

    AngularJS资源合集[备忘][申明:来源于网络] 地址:http://blog.csdn.net/allgis/article/details/44646597

  8. js隐藏中间4位,变成‘*’号

    var tel = "15222622548"; var reg = /^(\d{3})\d{4}(\d{4})$/; tel = tel.replace(reg, "$ ...

  9. Java ee第一周的作业

    这学期目标:对Java ee 进行一定程度的学习,希望最后自己能尽可能掌握Java ee的知识 企业及应用的特点:企业级的应用通常比较庞大,而且其中的数据需要保密. Java ee 框架图

  10. mybatis入门--配置

    1.导入jar包 mybatis-x.x.x.jar 导入到lib目录下, 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <depen ...